std::recursive_mutex:: try_lock
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
|
recursive_mutex::try_lock
|
||||
| Native handle | ||||
|
bool
try_lock
(
)
noexcept
;
|
(начиная с C++11) | |
Пытается заблокировать мьютекс. Возвращает управление немедленно. При успешном захвате блокировки возвращает true , в противном случае возвращает false .
Эта функция может иногда ошибочно завершаться неудачей и возвращать false даже если мьютекс в данный момент не заблокирован каким-либо другим потоком.
Поток может вызывать
try_lock
на рекурсивном мьютексе многократно. Успешные вызовы
try_lock
увеличивают счетчик владения: мьютекс будет освобожден только после того, как поток выполнит соответствующее количество вызовов
unlock
.
Максимальное количество уровней владения не определено. Вызов
try_lock
вернет
false
если это число превышено.
Предыдущая операция unlock() на том же мьютексе синхронизируется-с (как определено в std::memory_order ) этой операцией, если она возвращает true . Обратите внимание, что предыдущая операция lock() не синхронизируется с этой операцией, если она возвращает false .
Содержание |
Параметры
(нет)
Возвращаемое значение
true если блокировка была успешно получена, в противном случае false .
Исключения
Ничего не выбрасывает.
Пример
#include <iostream> #include <mutex> int main() { std::recursive_mutex test; if (test.try_lock()) { std::cout << "lock acquired\n"; test.unlock(); } else std::cout << "lock not acquired\n"; test.lock(); // non-recursive mutex would return false from try_lock now if (test.try_lock()) { std::cout << "lock acquired\n"; test.unlock(); } else std::cout << "lock not acquired\n"; test.unlock(); }
Вывод:
lock acquired lock acquired
Смотрите также
|
блокирует мьютекс, ожидает если мьютекс недоступен
(public member function) |
|
|
разблокирует мьютекс
(public member function) |
|
|
C documentation
для
mtx_trylock
|
|