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