std::mutex::unlock
void unlock(); | (с C++11) |
Разблокирует мьютекс.
Мьютекс должен быть заблокирован текущей нитью выполнения, в противном случае поведение не определено.
Эта операция синхронизируется с (как определено в std::memory_order) любой последующей операцией блокировки, которая получает владение тем же мьютексом.
Параметры
(нет)
Возвращаемое значение
(нет)
Исключения
Не выбрасывает ничего.
Примечания
unlock() обычно не вызывается напрямую: std::unique_lock и std::lock_guard используются для управления взаимной блокировкой.
Пример
Этот пример демонстрирует, как lock и unlock могут быть использованы для защиты общих данных.
#include <chrono>
#include <iostream>
#include <mutex>
#include <thread>
int g_num = 0; // protected by g_num_mutex
std::mutex g_num_mutex;
void slow_increment(int id)
{
for (int i = 0; i < 3; ++i)
{
g_num_mutex.lock();
int g_num_running = ++g_num;
g_num_mutex.unlock();
std::cout << id << " => " << g_num_running << '\n';
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main()
{
std::thread t1(slow_increment, 0);
std::thread t2(slow_increment, 1);
t1.join();
t2.join();
}Возможный вывод:
0 => 1 1 => 2 0 => 3 1 => 4 0 => 5 1 => 6
См. также
| блокирует мьютекс, блокируется, если мьютекс недоступен (публичный член-функция) |
|
| пытается заблокировать мьютекс, возвращает, если мьютекс недоступен (публичный член-функция) |
|
Документация на C для mtx_unlock |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/thread/mutex/unlock