C++ 参考手册

位置:首页 > C++ 参考手册 >线程支持库 >std::mutex > std::mutex::unlock

void unlock();
(C++11 起)

解锁互斥。

互斥必须为当前执行线程所锁定,否则行为未定义。

此操作同步于(定义于 std::memory_order )任何后继的取得同一互斥所有权的锁操作。

参数

(无)

返回值

(无)

异常

(无)

注意

通常不直接调用 unlock() :用 std::unique_lockstd::lock_guard 管理排他性锁定。

示例

此示例演示 lockunlock 能如何保护共享数据。

#include <iostream>
#include <chrono>
#include <thread>
#include <mutex>
 
int g_num = 0;  // 为 g_num_mutex 所保护
std::mutex g_num_mutex;
 
void slow_increment(int id) 
{
    for (int i = 0; i < 3; ++i) {
        g_num_mutex.lock();
        ++g_num;
        std::cout << id << " => " << g_num << '\n';
        g_num_mutex.unlock();
 
        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

参阅

锁定互斥,若互斥不可用则阻塞
(公开成员函数)
尝试锁定互斥,若互斥不可用则返回
(公开成员函数)