38 lines
874 B
Rust
38 lines
874 B
Rust
// ignore-windows: Concurrency on Windows is not supported yet.
|
|
// compile-flags: -Zmiri-disable-isolation
|
|
|
|
use std::thread;
|
|
use std::time::{Duration, Instant};
|
|
|
|
// Normally, waiting in park/park_timeout may spuriously wake up early, but we
|
|
// know Miri's timed synchronization primitives do not do that.
|
|
|
|
fn park_timeout() {
|
|
let start = Instant::now();
|
|
|
|
thread::park_timeout(Duration::from_millis(200));
|
|
|
|
assert!((200..500).contains(&start.elapsed().as_millis()));
|
|
}
|
|
|
|
fn park_unpark() {
|
|
let t1 = thread::current();
|
|
let t2 = thread::spawn(move || {
|
|
thread::park();
|
|
thread::sleep(Duration::from_millis(200));
|
|
t1.unpark();
|
|
});
|
|
|
|
let start = Instant::now();
|
|
|
|
t2.thread().unpark();
|
|
thread::park();
|
|
|
|
assert!((200..500).contains(&start.elapsed().as_millis()));
|
|
}
|
|
|
|
fn main() {
|
|
park_timeout();
|
|
park_unpark();
|
|
}
|