# std::unique_lock<Mutex>::lock

< cpp‎ | thread‎ | unique lock

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

锁定关联互斥。等效地调用 mutex()->lock() 。

### 参数

（无）

### 返回值

（无）

### 异常

- 任何 mutex()->lock() 所抛的异常

- 若无关联互斥，则为以 std::errc::operation_not_permitted 为错误码的 std::system_error

- 若关联互斥已为此 `unique_lock` 所锁定（换言之， owns_lock 为 true ），则为以 std::errc::resource_deadlock_would_occur 为错误码的 std::system_error

### 示例

下列示例用 `lock` 重获得被解锁的互斥。

    #include <mutex>
    #include <thread>
    #include <iostream>
    #include <vector>
    #include <chrono>

    int main()
    {
        int counter = 0;
        std::mutex counter_mutex;
        std::vector<std::thread> threads;

        auto worker_task = [&](int id) {
            std::unique_lock<std::mutex> lock(counter_mutex);
            ++counter;
            std::cout << id << ", initial counter: " << counter << '\n';
            lock.unlock();

            // 我们模拟昂贵操作时不保有锁
            std::this_thread::sleep_for(std::chrono::seconds(1));

            lock.lock();
            ++counter;
            std::cout << id << ", final counter: " << counter << '\n';
        };

        for (int i = 0; i < 10; ++i) threads.emplace_back(worker_task, i);

        for (auto &thread : threads) thread.join();
    }

可能的输出：

    0, initial counter: 1
    1, initial counter: 2
    2, initial counter: 3
    3, initial counter: 4
    4, initial counter: 5
    5, initial counter: 6
    6, initial counter: 7
    7, initial counter: 8
    8, initial counter: 9
    9, initial counter: 10
    6, final counter: 11
    3, final counter: 12
    4, final counter: 13
    2, final counter: 14
    5, final counter: 15
    0, final counter: 16
    1, final counter: 17
    7, final counter: 18
    9, final counter: 19
    8, final counter: 20

### 参阅

try_lock | 尝试锁定关联互斥，若互斥不可用则返回 (公开成员函数)
unlock | 解锁关联互斥 (公开成员函数)