On Tue, 07 May 2013 09:25:36 -0400, Andrei Alexandrescu <[email protected]> wrote:

No. A tutorial on memory consistency models would be too long to insert here. I don't know of a good online resource, does anyone?

In essence, a read requires an acquire memory barrier, a write requires a release memory barrier, but in this case, we only need to be concerned if the value we get back is not valid (i.e. NullValue).

Once in steady state, there is no need to acquire (as long as the write is atomic, the read value will either be NullValue or ActualValue, not something else). The code in the case of NullValue must be handled very carefully with the correct memory barriers (Given the fact that you should only execute once, just insert a full memory barrier). But that is not the steady state.

It's not a revolutionary design, it's basic double-checked locking (implemented in an unnecessarily complex way). It can be done right, but it's still really difficult to get right. The benefit of David's method is that it's REALLY easy to get right, and is MM independent.

-Steve

Reply via email to