Re: Am I or Alexandrescu wrong about singletons?
On Mar 26, 12:33 am, Herb Sutter <herb.sut...@gmail.com> wrote:
Please remember this: Standard ISO C/C++ volatile is useless
for multithreaded programming. No argument otherwise holds
water; at best the code may appear to work on some
compilers/platforms, including all attempted counterexamples
I've seen on this thread.
I agree with you in principle, but do be careful as to how you
formulate this. Standard ISO C/C++ is useless for multithreaded
programming, at least today. With or without volatile. And in
Standard ISO C/C++, volatile is useless for just about anything;
it was always intended to be mainly a hook for implementation
defined behavior, i.e. to allow things like memory-mapped IO
while not imposing excessive loss of optimizing posibilities
everywhere.
In theory, an implementation could define volatile in a way that
would make it useful in multithreading---I think Microsoft once
proposed doing so in the standard. In my opinion, this sort of
violates the original intention behind volation, which was that
volatile is applied to a single object, and doesn't affect other
objects in the code. But it's certainly something you could
argue both ways.
[...]
No. The reason that can't use volatiles for synchronization is that
they aren't synchronized (QED).
:-). And the reason their not synchronized is that
synchronization involves more than one variable, and that it was
never the intent of volatile to involve more than one variable.
(On a lot of modern processors, however, it would be impossible
to fully implement the original intent of volatile without
synchronization. The only instructions available on a Sparc,
for example, to ensure that a store instruction actually results
in a write to an external device is a membar. And that
synchronizes *all* accesses of the given type.)
[...]
(and it was a mistake to try to add those
guarantees to volatile in VC++).
Just curious: is that Microsoft talking, or Herb Sutter (or
both)?
--
James Kanze
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]