Метод unpark
Метод unpark класса Thread пробуждает
поток, который был приостановлен с помощью функции
park или park_timeout. Параметром метод
принимает ссылку на поток, который нужно разбудить.
Метод не возвращает значения. Если поток ещё не был
приостановлен, то вызов unpark устанавливает
специальный маркер, благодаря которому последующий
вызов park вернётся немедленно, не блокируя поток.
Синтаксис
thread.unpark()
Пример
Давайте создадим поток, который приостанавливается
с помощью park, а затем разбудим его из
главного потока с помощью unpark:
use std::thread;
use std::time::Duration;
fn main()
{
let handle = thread::spawn(|| {
println!("before park");
thread::park();
println!("after park");
});
thread::sleep(Duration::from_millis(100));
println!("unparking");
handle.thread().unpark();
handle.join().unwrap();
}
Результат выполнения кода:
before park
unparking
after park
Пример
Давайте разбудим поток до того, как он вызовет
park. В этом случае маркер будет установлен,
и park вернётся немедленно:
use std::thread;
use std::time::Duration;
fn main()
{
let handle = thread::spawn(|| {
thread::sleep(Duration::from_millis(200));
println!("before park");
thread::park();
println!("after park");
});
handle.thread().unpark();
println!("unparked early");
handle.join().unwrap();
}
Результат выполнения кода:
unparked early
before park
after park