РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1051 of 1245 menu

Функция park

Функция park блокирует текущий поток, переводя его в состояние ожидания. Поток не будет потреблять ресурсы процессора до тех пор, пока другой поток не вызовет функцию unpark, передав в неё дескриптор заблокированного потока. Функция не принимает параметров и возвращает тип . Блокировка может быть снята также при возникновении ложного пробуждения, поэтому в реальных программах park обычно используют в цикле с проверкой условия.

Синтаксис

thread::park()

Пример

Давайте создадим поток, который немедленно блокирует себя с помощью park, а главный поток разблокирует его через unpark:

use std::thread; use std::time::Duration; fn main() { let handle = thread::spawn(|| { println!("Thread is parked"); thread::park(); println!("Thread is unparked"); }); thread::sleep(Duration::from_millis(100)); handle.thread().unpark(); handle.join().unwrap(); }

Результат выполнения кода:

Thread is parked Thread is unparked

Пример

Давайте покажем, что вызов unpark до park не приводит к блокировке, так как разрешение на пробуждение сохраняется:

use std::thread; fn main() { let handle = thread::spawn(|| { thread::park(); println!("Thread continues after park"); }); handle.thread().unpark(); handle.join().unwrap(); }

Результат выполнения кода:

Thread continues after park

Смотрите также

  • функция unpark,
    которая разблокирует поток, заблокированный функцией park
  • функция sleep,
    которая приостанавливает поток на заданный промежуток времени
  • функция current,
    которая возвращает дескриптор текущего потока
  • структура Thread,
    которая представляет дескриптор потока выполнения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить