
John Maddock wrote:
I'm interested in getting something like "needs_lock" below into the normal traits, perhaps as part of boost thread. It informs you whether of not an operation on such a contiguous block needs a lock to be atomic.
For example, on ia32 32 bit aligned ops are atomic, on ia64 it is 64 bit. doubles on ia32 need locking to be atomic, on ia64 they don't. sizeof(void*) works generically for these two platforms as is included in the code below. A default, safety first implementation might return true always for needs lock, or perhaps, true for all sizeof's greater than a byte.
Is it the case that we could actually rely on this? I thought for example that on IA32 operations were only atomic and thread safe when the assembly is prefixed by LOCK?
AFAIK reads and ordinary writes are atomic without LOCK. Read-modify-write operations need LOCK.