Skip to content

Commit 2288aa7

Browse files
committed
---
yaml --- r: 229069 b: refs/heads/try c: d1cf449 h: refs/heads/master i: 229067: 297f744 v: v3
1 parent 2e0c24b commit 2288aa7

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: aca2057ed5fb7af3f8905b2bc01f72fa001c35c8
33
refs/heads/snap-stage3: 1af31d4974e33027a68126fa5a5a3c2c6491824f
4-
refs/heads/try: dbf3a63dd78f547bced8d086067d98ba0b414fd3
4+
refs/heads/try: d1cf449034095725a19cba0bbc79753f2f460e69
55
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
66
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
77
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try/src/doc/tarpl/races.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ race condition can't violate memory safety in a Rust program on
2525
its own. Only in conjunction with some other unsafe code can a race condition
2626
actually violate memory safety. For instance:
2727

28-
```rust
28+
```rust,norun
2929
use std::thread;
3030
use std::sync::atomic::{AtomicUsize, Ordering};
3131
use std::sync::Arc;
@@ -54,6 +54,24 @@ thread::spawn(move || {
5454
// program execution (panicing is rarely correct) depends on order of
5555
// thread execution.
5656
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+
});
5775
5876
if idx.load(Ordering::SeqCst) < data.len() {
5977
unsafe {

0 commit comments

Comments
 (0)