Re: Please disprove this Double-Checked Locking "fix"
On May 1, 10:26 pm, Pavel
<pauldontspamt...@removeyourself.dontspam.yahoo> wrote:
[...]
This does not prevent from unnecessary overhead though
(grabbing a mutex in a highly contentious case can be
expensive and it is unnecessary when all contenders want is to
read a pointer rather than change it -- which is the case
after the Singleton has been initialized).
Contention becomes relevant when two conditions are met: many
threads want to acquire the mutex, and having acquired the
mutex, a thread holds it for a certain time. In the case of the
singleton, once the object has been created, the thread holds
the mutex the time it takes for a comparison with null. That
is, a very, very short time. I have yet to see a case where
there was actual contention for the mutex in a singleton once
the singleton has been created. And if you do end up in such a
rare case, as I pointed out, calling Singleton::instance() once
before threading starts is sufficient to ensure that the mutex
isn't needed at all. Double check locking is a solution in
search of a problem, and to top it off, a solution which doesn't
work (at least in standard C++).
--
James Kanze