|
Boost : |
Subject: Re: [boost] n2427 atomic implementation?
From: Anthony Williams (anthony.ajw_at_[hidden])
Date: 2008-11-18 18:14:43
"vicente.botet" <vicente.botet_at_[hidden]> writes:
> Can the N2427 - C++ Atomic Types and Operations be implemented
> without the help of the compiler?
No.
They don't need to be intrinsics --- if you can write inline assembler
(or separately-compiled assembler for that matter) then you can write
the operations themselves directly. You might even be able to use
simple C++ (e.g. just plain assignment for load or store).
The reason you need compiler support is preventing inappropriate
optimizations: atomic operations can't be optimized out, and generally
must not be reordered before or after any other operations. This means
that even non-atomic stores performed before an atomic store have to
be complete, and can't be cached in a register (for example). Also,
loads that occur after an atomic operation cannot be hoisted before
the atomic op.
On some compilers, just using inline assembler is enough. On others,
calling an external function is enough. MSVC provides
_ReadWriteBarrier() to provide the compiler ordering. Other compilers
need other flags.
> Do some one have a partial implementation?
I have a full implementation for MSVC 2008 as part of my C++0x thread
library, currently in beta: http://www.stdthread.co.uk
Anthony
-- Anthony Williams Author of C++ Concurrency in Action | http://www.manning.com/williams Custom Software Development | http://www.justsoftwaresolutions.co.uk Just Software Solutions Ltd, Registered in England, Company Number 5478976. Registered Office: 15 Carrallack Mews, St Just, Cornwall, TR19 7UL, UK
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk