Spec-Zone.ru › C++

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

См. также

lock
блокирует мьютекс, блокируется, если мьютекс недоступен
(публичный член-функция)
unlock
разблокирует мьютекс
(публичный член-функция)
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API