www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - C1X memory-order in C1X

reply bearophile <bearophileHUGS lycos.com> writes:
I have found this though Reddit, I am not expert about this stuff, but it's
something for the design of the next C (C1X), about memory-order options:


Aug 12 2011
parent Sean Kelly <sean invisibleduck.org> writes:
On Aug 12, 2011, at 6:09 AM, bearophile wrote:

 I have found this though Reddit, I am not expert about this stuff, but =


This is pretty much what's in C++0x. The pertinent bit is "The library defines a number of atomic operations (7.17) and operations = on mutexes (7.25.4) that are specially identified as synchronization = operations. These operations play a special role in making assignments = in one thread visible to another. A synchronization operation on one or = more memory locations is either an acquire operation, a release = operation, both an acquire and release operation, or a consume = operation." A "consume operation" is effectively a raw operation from the = perspective of the CPU and compiler (unless you're targeting the Alpha). = The paragraph concludes with: "A synchronization operation without an associated memory location is a = fence and can be either an acquire fence, a release fence, or both an = acquire and release fence. In addition, there are relaxed atomic = operations, which are not synchronization operations, and atomic = read-modify-write operations, which have special characteristics." core.atomic provides the same basic options for atomicLoad and = atomicStore, though with safe defaults. I do think that anything but = fully sequenced or raw is getting more detailed than nearly every = programmer cares about, but I imagine the range of options will be = useful for the few library programmers out there who will be creating = lock-free data structures or whatever.=
Aug 12 2011