Книга: Программирование для Linux. Профессиональный подход
4.4.4. Неблокирующие проверки исключающих семафоров
4.4.4. Неблокирующие проверки исключающих семафоров
Иногда нужно, не заблокировав программу, проверить, захвачен ли исключающий семафор. Для потока не всегда приемлемо находиться в режиме пассивного ожидания, ведь за это время можно сделать много полезного! Функция pthread_mutex_lock()
не возвращает значения до тех пор, пока семафор не будет освобожден, поэтому она нам не подходит.
То, что нам нужно, — это функция pthread_mutex_trylock()
. Если она обнаруживает, что семафор свободен, то захватывает его так же, как и функция pthread_mutex_lock()
, возвращая при этом 0. Если же оказывается, что семафор уже захвачен другим потоком, функция pthread_mutex_trylock()
не блокирует программу, а немедленно завершается, возвращая код ошибки EBUSY
. "Права собственности" другого потока при этом не нарушаются. Можно попытаться захватить семафор позднее.
- 4.4.3. Взаимоблокировки исключающих семафоров
- Реализация семафоров в Linux
- 10.16. Реализация с использованием семафоров System V
- 7.2. Операции проверки файлов
- Синхронизация с помощью семафоров
- 5.2.4. Отладка семафоров
- 12.1. Операторы проверки: assert()
- Создание и инициализация семафоров
- Использование семафоров
- Сравнение спин-блокировок и семафоров
- Ограниченность семафоров
- Вопросы для самопроверки