Add a test for thread locals.
This commit is contained in:
parent
8dd8f199ca
commit
92946b5a9c
48
tests/run-pass/concurrency/thread_locals.rs
Normal file
48
tests/run-pass/concurrency/thread_locals.rs
Normal file
@ -0,0 +1,48 @@
|
||||
#![feature(thread_local)]
|
||||
|
||||
use std::thread;
|
||||
|
||||
#[thread_local]
|
||||
static mut A: u8 = 0;
|
||||
#[thread_local]
|
||||
static mut B: u8 = 0;
|
||||
static mut C: u8 = 0;
|
||||
|
||||
unsafe fn get_a_ref() -> *mut u8 {
|
||||
&mut A
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
||||
unsafe {
|
||||
let x = get_a_ref();
|
||||
*x = 5;
|
||||
assert_eq!(A, 5);
|
||||
B = 15;
|
||||
C = 25;
|
||||
}
|
||||
|
||||
thread::spawn(|| {
|
||||
unsafe {
|
||||
assert_eq!(A, 0);
|
||||
assert_eq!(B, 0);
|
||||
assert_eq!(C, 25);
|
||||
B = 14;
|
||||
C = 24;
|
||||
let y = get_a_ref();
|
||||
assert_eq!(*y, 0);
|
||||
*y = 4;
|
||||
assert_eq!(A, 4);
|
||||
assert_eq!(*get_a_ref(), 4);
|
||||
|
||||
}
|
||||
}).join().unwrap();
|
||||
|
||||
unsafe {
|
||||
assert_eq!(*get_a_ref(), 5);
|
||||
assert_eq!(A, 5);
|
||||
assert_eq!(B, 15);
|
||||
assert_eq!(C, 24);
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user