Spec-Zone.ru › C++

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

См. также

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

Spec-Zone.ru

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