Метод try_lock
Метод try_lock класса unique_lock пытается захватить мьютекс,
связанный с объектом блокировки, не блокируя текущий поток.
Если мьютекс свободен, метод захватывает его и возвращает true.
Если мьютекс уже занят другим потоком, метод не ждет освобождения
и сразу возвращает false. Метод не принимает параметров.
Синтаксис
lock.try_lock()
Пример
Давайте создадим объект unique_lock и попробуем захватить
мьютекс методом try_lock:
#include <iostream>
#include <mutex>
using namespace std;
int main()
{
mutex mtx;
unique_lock<mutex> lock(mtx, defer_lock);
bool res = lock.try_lock();
cout << res << endl;
return 0;
}
Результат выполнения кода:
1
Пример
Давайте захватим мьютекс дважды: сначала методом try_lock,
а затем попробуем захватить его повторно:
#include <iostream>
#include <mutex>
using namespace std;
int main()
{
mutex mtx;
unique_lock<mutex> lock(mtx, defer_lock);
bool res1 = lock.try_lock();
bool res2 = lock.try_lock();
cout << res1 << " " << res2 << endl;
return 0;
}
Результат выполнения кода:
1 0
Смотрите также
-
класс
unique_lock,
который управляет блокировкой мьютекса -
метод
lock,
который блокирует мьютекс с ожиданием -
метод
unlock,
который освобождает мьютекс -
метод
try_lock,
который пытается захватить мьютекс без ожидания