File tree Expand file tree Collapse file tree 2 files changed +20
-2
lines changed
branches/beta/src/doc/tarpl Expand file tree Collapse file tree 2 files changed +20
-2
lines changed Original file line number Diff line number Diff line change @@ -23,7 +23,7 @@ refs/tags/0.9: 36870b185fc5f5486636d4515f0e22677493f225
23
23
refs/tags/0.10: ac33f2b15782272ae348dbd7b14b8257b2148b5a
24
24
refs/tags/0.11.0: e1247cb1d0d681be034adb4b558b5a0c0d5720f9
25
25
refs/tags/0.12.0: f0c419429ef30723ceaf6b42f9b5a2aeb5d2e2d1
26
- refs/heads/beta: dbf3a63dd78f547bced8d086067d98ba0b414fd3
26
+ refs/heads/beta: d1cf449034095725a19cba0bbc79753f2f460e69
27
27
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
28
28
refs/heads/tmp: 938f5d7af401e2d8238522fed4a612943b6e77fd
29
29
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
Original file line number Diff line number Diff line change @@ -25,7 +25,7 @@ race condition can't violate memory safety in a Rust program on
25
25
its own. Only in conjunction with some other unsafe code can a race condition
26
26
actually violate memory safety. For instance:
27
27
28
- ``` rust
28
+ ``` rust,norun
29
29
use std::thread;
30
30
use std::sync::atomic::{AtomicUsize, Ordering};
31
31
use std::sync::Arc;
@@ -54,6 +54,24 @@ thread::spawn(move || {
54
54
// program execution (panicing is rarely correct) depends on order of
55
55
// thread execution.
56
56
println!("{}", data[idx.load(Ordering::SeqCst)]);
57
+ ```
58
+
59
+ ``` rust,norun
60
+ use std::thread;
61
+ use std::sync::atomic::{AtomicUsize, Ordering};
62
+ use std::sync::Arc;
63
+
64
+ let data = vec![1, 2, 3, 4];
65
+
66
+ let idx = Arc::new(AtomicUsize::new(0));
67
+ let other_idx = idx.clone();
68
+
69
+ // `move` captures other_idx by-value, moving it into this thread
70
+ thread::spawn(move || {
71
+ // It's ok to mutate idx because this value
72
+ // is an atomic, so it can't cause a Data Race.
73
+ other_idx.fetch_add(10, Ordering::SeqCst);
74
+ });
57
75
58
76
if idx.load(Ordering::SeqCst) < data.len() {
59
77
unsafe {
You can’t perform that action at this time.
0 commit comments