On Dec 8, 2012, at 1:17 PM, Steve Sisak wrote:

> At 10:24 AM -0800 12/8/12, Kyle Sluder wrote:
>> On Dec 8, 2012, at 10:06 AM, Steve Sisak <sgs-li...@codewell.com> wrote:
>> 
>> > Further, if writes were not complete at the end of the block, the 
>> > construct would be essentially useless for its intended purpose.
>> 
>> By the way, you're wrong about this too. All @synchronized does is act as a 
>> mutex around a code block. It does not cause the compiler to reorder 
>> instructions and issue memory barriers in such a way that initialization is 
>> guaranteed to precede assignment from the perspective of all threads.
> 
> Please cite a source for this assertion.
> 
> From:
> 
> <https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html>
> 
> "If you are already using a mutex to protect a section of code, do not 
> automatically assume you need to use the volatile keyword to protect 
> important variables inside that section. A mutex includes a memory barrier to 
> ensure the proper ordering of load and store operations."
> 
> I acknowledge that, without proper memory barriers, double-checked locking is 
> problematic, but am providing an example using a construct which I'm fairly 
> sure uses proper memory barriers.

The memory barrier is only at the boundaries of the @synchronized block.  Your 
extra check is not protected by the memory barriers of the @synchronized block 
because it's not within it.

If you search for examples of "fixed" double-checked locking using explicit 
memory barriers, you'll see that one of the barriers occurs in the always-taken 
code path.  Your code does not have that.

Regards,
Ken


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to