File tree 3 files changed +52
-0
lines changed
tests/run-pass/concurrency
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