mirror of
https://github.com/rust-lang/rust.git
synced 2026-06-01 14:10:03 +03:00
merge parking test into general synchronization test
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
// 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();
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
warning: thread support is experimental. For example, Miri does not detect data races yet.
|
||||
|
||||
@@ -312,6 +312,34 @@ fn check_rwlock_unlock_bug2() {
|
||||
h.join().unwrap();
|
||||
}
|
||||
|
||||
fn park_timeout() {
|
||||
let start = Instant::now();
|
||||
|
||||
thread::park_timeout(Duration::from_millis(200));
|
||||
// Normally, waiting in park/park_timeout may spuriously wake up early, but we
|
||||
// know Miri's timed synchronization primitives do not do that.
|
||||
|
||||
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();
|
||||
// Normally, waiting in park/park_timeout may spuriously wake up early, but we
|
||||
// know Miri's timed synchronization primitives do not do that.
|
||||
|
||||
assert!((200..500).contains(&start.elapsed().as_millis()));
|
||||
}
|
||||
|
||||
fn main() {
|
||||
check_barriers();
|
||||
check_conditional_variables_notify_one();
|
||||
@@ -327,4 +355,6 @@ fn main() {
|
||||
check_once();
|
||||
check_rwlock_unlock_bug1();
|
||||
check_rwlock_unlock_bug2();
|
||||
park_timeout();
|
||||
park_unpark();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user