|
Boost : |
Subject: Re: [boost] [lockfree] review
From: Alexander Terekhov (terekhov_at_[hidden])
Date: 2011-08-24 18:24:13
Dave Abrahams wrote:
[...]
> > mi.lock();
> > i = 1;
> > mi.unlock();
> >
> > mj.lock();
> > j = 2;
> > mj.unlock();
> >
> > can be transformed to
> >
> > multi_lock(mi, mj); // deadlock free
> > j = 2;
> > i = 1;
> > mi.unlock();
> > mj.unlock();
> >
> > and thus result in reodering i = 1 and j = 2.
> >
> > With C++11 default atomics (SC) for i and j such reodering is
> > prohibited.
>
> As it is with C++11 mutexes, IIUC.
Mutexes need only *acquire-release* semantics coupled with RMW(s) to
result in *SC* for associated race-free data, as observed by another
thread(s).
C++11 default atomics are *SC* without mutexes (lockfree and all that
stuff)... *SC* is more expansive than *acquire-release* in terms of sync
on platforms such as:
> If you have contrary evidence, please point to it.
http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html
(PowerPC)
I mean:
Load SC: hwsync; ld; cmp; bc; isync
Store SC: hwsync; st
alternative mappings:
Load SC: ld; hwsync
Store SC: lwsync; st; hwsync
Note that *acquire-release* does NOT need *hw*sync:
Load Acquire: ld; cmp; bc; isync
Store Release: lwsync; st
regards,
alexander.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk