# std::mutex::unlock

< cpp‎ | thread‎ | mutex

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

解锁互斥。

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

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

### 参数

（无）

### 返回值

（无）

### 异常

不抛出。

### 注解

通常不直接调用 `unlock()` ：用 std::unique_lock 与 std::lock_guard 管理互斥锁定。

### 示例

此示例演示 `lock` 与 `unlock` 能如何保护共享数据。

    #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

### 参阅

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