No. The most efficient thing would be to use core.atomic atomicLoad!msync.acq() 
for the read and atomicStore!msync.rel() for the write. Use a temporary to 
construct the instance, etc. I think Andrei outlined the proper approach in a 
series of articles a while back. 

Sent from my iPhone

On Dec 16, 2011, at 11:47 PM, Andrew Wiley <[email protected]> wrote:

> I was looking through Jonathan Davis's pull request to remove static
> constructors from std.datetime, and I realized that I don't know
> whether Double Checked Locking is legal under D's memory model, and
> what the requirements for it to work would be.
> (if you're not familiar with the term, check out
> http://en.wikipedia.org/wiki/Double-checked_locking - it's a useful
> but problematic programming pattern that can cause subtle concurrency
> bugs)
> It seems like it should be legal as long as the variable tested and
> initialized is flagged as shared so that the compiler enforces proper
> fences, but is this actually true?

Reply via email to