File tree Expand file tree Collapse file tree 3 files changed +52
-0
lines changed
tests/run-pass/concurrency Expand file tree Collapse file tree 3 files changed +52
-0
lines changed Original file line number Diff line number Diff line change 1+ // ignore-windows: Concurrency on Windows is not supported yet.
2+
3+ use std:: sync:: { Arc , Barrier } ;
4+ use std:: thread;
5+
6+ // Check if Rust barriers are working.
7+
8+ /// This test is taken from the Rust documentation.
9+ /// https://doc.rust-lang.org/stable/std/sync/struct.Barrier.html
10+ fn check_barriers ( ) {
11+ let mut handles = Vec :: with_capacity ( 10 ) ;
12+ let barrier = Arc :: new ( Barrier :: new ( 10 ) ) ;
13+ for _ in 0 ..10 {
14+ let c = Arc :: clone ( & barrier) ;
15+ // The same messages will be printed together.
16+ // You will NOT see any interleaving.
17+ handles. push ( thread:: spawn ( move || {
18+ println ! ( "before wait" ) ;
19+ c. wait ( ) ;
20+ println ! ( "after wait" ) ;
21+ } ) ) ;
22+ }
23+ for handle in handles {
24+ handle. join ( ) . unwrap ( ) ;
25+ }
26+ }
27+
28+ fn main ( ) {
29+ check_barriers ( ) ;
30+ }
Original file line number Diff line number Diff line change 1+ warning: thread support is experimental and incomplete: weak memory effects are not emulated.
2+
Original file line number Diff line number Diff line change 1+ before wait
2+ before wait
3+ before wait
4+ before wait
5+ before wait
6+ before wait
7+ before wait
8+ before wait
9+ before wait
10+ before wait
11+ after wait
12+ after wait
13+ after wait
14+ after wait
15+ after wait
16+ after wait
17+ after wait
18+ after wait
19+ after wait
20+ after wait
You can’t perform that action at this time.
0 commit comments