C1X memory-order in C1X
Sean Kelly
sean at invisibleduck.org
Fri Aug 12 11:17:53 PDT 2011
On Aug 12, 2011, at 6:09 AM, bearophile wrote:
> 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:
>
> http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1525.htm
This is pretty much what's in C++0x. The pertinent bit is 5.1.2.4:
"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.
More information about the Digitalmars-d
mailing list