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/cpp/thread/mutex/unlock

Spec-Zone.ru

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