std::recursive_mutex::try_lock
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
См. также
| блокирует мьютекс; если мьютекс недоступен, ожидает его освобождения (открытая функция-член) |
|
| разблокирует мьютекс (открытая функция-член) |
|
Документация по C для mtx_trylock |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/recursive_mutex/try_lock