std::recursive_mutex::try_lock
bool try_lock() noexcept; | (since 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/w/cpp/thread/recursive_mutex/try_lock