06. Семафоры

Семафоры

В C++20 в стандартной библиотеке появились семафоры.
Семафоры в языке C++ напрямую не используются, чаще они используются в классическом C для обработки событий и проверки занятости ресурсов.
В языке C++ для разграничения доступа к общим ресурсам используются мьютексы и очереди, что весьма эффективно.
Двоичный семафор в чем-то похож на мьютекс, он показывает свободен ли ресурс.
Счетные семафоры «показывают» количество свободных ресурсов (например число свободных задач, выполняющих одинаковые вычисления параллельно). Их логику можно реализовать на основе очередей.

Главное отличие семафора — он не привязан к конкретному потоку, в отличие от мьютекса, который должен блокироваться и разблокироваться в одном.

Стандартная библиотека C++20 предлагает к использованию счетные и двоичные семафоры, представленные классами std::counting_semaphore и std::binary_semaphore.

counting_semaphore– это примитив синхронизации, который может управлять доступом к общему ресурсу. В отличие от мьютекса std::mutexcounting_semaphore допускает более одного параллельного доступа к одному и тому же ресурсу.

counting_semaphore содержит внутренний счетчик, который инициализируется конструктором.
Этот счетчик уменьшается при вызовах метода acquire() и связанных с ним методов и увеличивается при вызовах метода release(). Когда счетчик равен нулю, acquire() блокирует поток до тех пор, пока счетчик не увеличится. Кроме того, для использования доступны методы:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *