On 12/17/11 1:56 AM, Andrew Wiley wrote:
On Sat, Dec 17, 2011 at 1:47 AM, 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?

This entry in the FAQ makes me suspicious:
```
What does shared have to do with memory barriers?

Reading/writing shared data emits memory barriers to ensure sequential
consistency (not implemented).
```

So DCL should be alright with data flagged as shared, but it's not
implemented in the compiler?

That is correct.

Andrei

Reply via email to