Метод unlock
Метод unlock класса mutex освобождает мьютекс, снимая блокировку, которая была установлена ранее с помощью метода lock или try_lock. Метод не принимает параметров и не возвращает значения. После вызова unlock мьютекс переходит в разблокированное состояние, и другие потоки могут захватить его для выполнения критической секции. Вызывать unlock должен только тот поток, который владеет блокировкой, иначе поведение программы не определено.
Синтаксис
mutex.unlock()
Пример
Давайте захватим мьютекс методом lock, изменим общую переменную, а затем освободим мьютекс методом unlock:
#include <iostream>
#include <mutex>
using namespace std;
mutex mtx;
int counter = 0;
int main()
{
mtx.lock();
counter = 5;
cout << counter << endl;
mtx.unlock();
return 0;
}
Результат выполнения кода:
5
Пример
Давайте рассмотрим использование unlock в двух потоках, которые поочерёдно захватывают и освобождают мьютекс:
#include <iostream>
#include <mutex>
#include <thread>
using namespace std;
mutex mtx;
int res = 0;
void increment()
{
mtx.lock();
res = res + 1;
cout << res << endl;
mtx.unlock();
}
int main()
{
thread t1(increment);
thread t2(increment);
t1.join();
t2.join();
return 0;
}
Результат выполнения кода:
1
2
Смотрите также
-
класс
mutex,
который представляет собой примитив синхронизации -
метод
lock,
который захватывает мьютекс -
метод
try_lock,
который пытается захватить мьютекс без блокировки -
класс
lock_guard,
который автоматически управляет блокировкой мьютекса