is looking at a work in progress. For the DCBL pattern - if something
(compiler, processor, cache) is reordering write operations inside the lock,
there is a chance the cheating thread might think the singleton is fully
constructed even though all of the writes from the singleton's ctor have yet
to be "published" for other threads to see.


Yes and this is possible no matter what you do.


"It is explicitly not a requirement that a conforming implementation
of the CLI guarantee that all state updates
performed within a constructor be uniformly visible before the
constructor completes. CIL generators can
ensure this requirement themselves by inserting appropriate calls to
the memory barrier or volatile write
instructions."

On 7/9/07, Scott Allen <[EMAIL PROTECTED]> wrote:
Fabian wrote:

>
> But isn't the point (and also the issue the barrier tries to solve)
> that code from outside the lock actually does access _provider in the
> double-checked locking pattern? So "nothing else can access provider
> while in the lock" seems not to be true, or is it?
>

Yes, I think of the scenario this way:

There is a protocol to follow when working with shared memory. The protocol
is to take the lock, then read or write shared memory, then release the
lock. As long as all the threads working with the same shared memory follow
this protocol there is no issue with respect to the how other threads "see"
the ordering of reads and writes inside the lock.

Code like the double-check lock pattern is trying to gain performance by
cheating and circumventing the standard protocol. The code peeks at shared
memory without taking a lock. At that point, the ordering of the memory
operations inside the lock becomes extremely important. The cheating thread
is looking at a work in progress. For the DCBL pattern - if something
(compiler, processor, cache) is reordering write operations inside the lock,
there is a chance the cheating thread might think the singleton is fully
constructed even though all of the writes from the singleton's ctor have yet
to be "published" for other threads to see.

--s

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com



--
Studying for the Turing test

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to