On Sat, 05 Feb 2011 03:00:31 -0500, Jérôme M. Berger <[email protected]>
wrote:
Robert Jacques wrote:
On Fri, 04 Feb 2011 17:23:35 -0500, Jérôme M. Berger <[email protected]>
wrote:
Steven Schveighoffer wrote:
D's monitors are lazily created, so there should be no issue with
resource allocation.
What happens if two threads attempt to create a monitor for the
same object at the same time? Is there a global lock to avoid race
conditions in this case?
Jerome
Only the reference to the mutex is shared, so all you need in an atomic
op.
This requires an atomic "if (a is null) a = b;". I did not know
that such a beast existed.
Jerome
Yes, the beast exists and it's the basis for most lock-free programming as
well as lock implementations. It's generally known as compare and swap or
CAS (see http://en.wikipedia.org/wiki/Compare_and_swap and
core.atomic.cas). There's also another atomic primitive called
Load-Link/Store-Conditional, which is available an several non-x86
architectures (ARM, PowerPC, etc) and is generally considered a more
powerful primitive than CAS.