Skip to content

Commit a4d8c2c

Browse files
authored
Merge pull request #168 from RalfJung/atomics
atomics: C11 -> C++20
2 parents cbbe63b + 37a0693 commit a4d8c2c

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

src/atomics.md

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
# Atomics
22

3-
Rust pretty blatantly just inherits C11's memory model for atomics. This is not
3+
Rust pretty blatantly just inherits the memory model for atomics from C++20. This is not
44
due to this model being particularly excellent or easy to understand. Indeed,
55
this model is quite complex and known to have [several flaws][C11-busted].
66
Rather, it is a pragmatic concession to the fact that *everyone* is pretty bad
77
at modeling atomics. At very least, we can benefit from existing tooling and
8-
research around C.
8+
research around the C/C++ memory model.
9+
(You'll often see this model referred to as "C11" or "C/C++11". C and C++ share their
10+
memory model and those were the first versions but they have received some bugfixes
11+
since then.)
912

1013
Trying to fully explain the model in this book is fairly hopeless. It's defined
1114
in terms of madness-inducing causality graphs that require a full book to
1215
properly understand in a practical way. If you want all the nitty-gritty
13-
details, you should check out [C's specification (Section 7.17)][C11-model].
16+
details, you should check out the [C++20 draft specification (Section 31)][C++-model].
1417
Still, we'll try to cover the basics and some of the problems Rust developers
1518
face.
1619

17-
The C11 memory model is fundamentally about trying to bridge the gap between the
20+
The C++ memory model is fundamentally about trying to bridge the gap between the
1821
semantics we want, the optimizations compilers want, and the inconsistent chaos
1922
our hardware wants. *We* would like to just write programs and have them do
2023
exactly what we said but, you know, fast. Wouldn't that be great?
@@ -113,7 +116,7 @@ programming:
113116

114117
# Data Accesses
115118

116-
The C11 memory model attempts to bridge the gap by allowing us to talk about the
119+
The C++ memory model attempts to bridge the gap by allowing us to talk about the
117120
*causality* of our program. Generally, this is by establishing a *happens
118121
before* relationship between parts of the program and the threads that are
119122
running them. This gives the hardware and compiler room to optimize the program
@@ -148,7 +151,7 @@ propagated to other threads. The set of orderings Rust exposes are:
148151
* Acquire
149152
* Relaxed
150153

151-
(Note: We explicitly do not expose the C11 *consume* ordering)
154+
(Note: We explicitly do not expose the C++ *consume* ordering)
152155

153156
TODO: negative reasoning vs positive reasoning? TODO: "can't forget to
154157
synchronize"
@@ -252,4 +255,4 @@ relaxed operations can be cheaper on weakly-ordered platforms.
252255

253256

254257
[C11-busted]: http://plv.mpi-sws.org/c11comp/popl15.pdf
255-
[C11-model]: http://www.open-std.org/jtc1/sc22/wg14/www/standards.html#9899
258+
[C++-model]: http://eel.is/c++draft/atomics.order

0 commit comments

Comments
 (0)