[webkit-dev] Atomic read/write operations and thread safety

Maciej Stachowiak mjs at apple.com
Wed Dec 15 12:14:23 PST 2010


On Dec 15, 2010, at 8:47 AM, Brady Eidson wrote:

> 
> On Dec 15, 2010, at 4:28 AM, Steve Block wrote:
> 
>> I have a question about whether WebCore code makes assumptions about
>> the atomicity of certain read/write operations.
>> 
>> The particular instance I'm interested in is IconDatabase, where
>> m_threadTerminationRequested is written to from the main thread (in
>> close() for example) and read from the DB thread (in
>> syncThreadMainLoop()) without any locking.  It looks like the code is
>> written such that there's no particular synchronization requirement in
>> terms of the order in which the value is set and read. But there's a
>> risk of a garbled read in the case of a simultaneous read and write
>> from the two threads.
>> 
>> I assume that the lack of locking is an intentional decision, based on
>> the fact that on all relevant architectures, a boolean read/write is
>> atomic?
> 
> Correct - or, at least, at the time it was correct.  Have you discovered a relevant architecture where it is no longer correct?
> 
>> Is this a general WebCore policy? It would be great if somebody could
>> confirm this, or point out why I'm wrong.
> 
> I wouldn't be surprised if there were other examples of an unprotected thread shared boolean in either WebCore or any platform's WebKit.
> 
> I *would* be surprised if there was an example of *any other data type* that was shared between threads unprotected.
> 
> That said, I don't think we have any general WebCore policies about multithread practices.  There might be value in such a document.

One possibility is to check the perf impact os using atomic read/write primitives; if it doesn't have a performance cost, it might be safer to do it that way.

 - Maciej



More information about the webkit-dev mailing list