Low-Lock Singletons In D
deadalnix
deadalnix at gmail.com
Tue May 7 09:30:05 PDT 2013
On Tuesday, 7 May 2013 at 16:14:50 UTC, Steven Schveighoffer
wrote:
> Not really. Whether it is entered or not is dictated by the
> vtable. Even classic double-check locking doesn't need an
> acquire outside the lock. Even if your CPU's view of the
> variable is outdated, the check after the memory barrier inside
> the lock only occurs once. After that, steady state is
> achieved. All subsequent reads need no memory barriers,
> because the singleton object will never change after that.
>
> The only thing we need to guard against is non-atomic writes,
> and out of order writes of the static variable (fixed with a
> memory barrier). Instruction ordering OUTSIDE the lock is
> irrelevant, because if we don't get the "steady state" value
> (not null), then we go into the lock to perform the careful
> initialization with barriers.
>
> I think aligned native word writes are atomic, so we don't have
> to worry about that.
>
That is incorrect as the thread not going into the lock can see a
partially initialized object.
More information about the Digitalmars-d
mailing list