Semaphore

Наследует: RefCounted < Object

Механизм синхронизации, используемый для управления доступом к общему ресурсу потоками Thread.

Описание

Синхронизирующий семафор, который можно использовать для синхронизации нескольких Thread. Инициализируется нулем при создании. Для двоичной версии см. Mutex.

Предупреждение: Семафоры следует использовать осторожно, чтобы избежать взаимоблокировок.

Предупреждение: Чтобы гарантировать, что операционная система сможет выполнить надлежащую очистку (без сбоев, без взаимоблокировок), должны быть соблюдены следующие условия:

  • Когда счетчик ссылок Semaphore достигает нуля и, следовательно, он уничтожается, ни один поток не должен его ожидать.

  • Когда счетчик ссылок Thread достигает нуля и, следовательно, он уничтожается, он не должен ожидать ни одного семафора.

Обучающие материалы

Методы

void

post(count: int = 1)

bool

try_wait()

void

wait()


Описания метода

void post(count: int = 1) 🔗

Понижает Semaphore, разрешая вход одному потоку или нескольким, если указано count.


bool try_wait() 🔗

Подобно wait(), но не блокирует, поэтому если значение равно нулю, немедленно завершается ошибкой и возвращается false. Если не равно нулю, возвращается true, чтобы сообщить об успешном завершении.


void wait() 🔗

Ожидает Semaphore, если его значение равно нулю, блокирует до тех пор, пока не станет ненулевым.