unique_lock的用法
时间: 2023-09-27 10:09:32 浏览: 150
unique_lock 是 C++11 提供的一个互斥锁(mutex)的包装器。它提供了一种更方便和安全的方式来管理互斥锁的生命周期。
使用 unique_lock 的步骤如下:
1. 创建互斥锁对象。
2. 创建 unique_lock 对象并传入互斥锁对象作为参数。
3. 使用 unique_lock 对象锁定互斥锁,可以使用 lock() 方法或通过构造函数传递 std::defer_lock 参数来延迟锁定。
4. 在需要保护的临界区域内进行操作。
5. unique_lock 对象离开作用域后,会自动释放互斥锁。
unique_lock 提供了一些有用的方法,比如 lock()、unlock()、try_lock()、swap() 等,可以根据需要进行操作。
下面是一个使用 unique_lock 的简单示例:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void print(std::string message) {
std::unique_lock<std::mutex> lock(mtx);
std::cout << message << std::endl;
}
int main() {
std::thread t1(print, "Hello");
std::thread t2(print, "World");
t1.join();
t2.join();
return 0;
}
```
在上面的示例中,我们创建了一个互斥锁对象 mtx,并在 print 函数中使用 unique_lock 对象 lock 来锁定这个互斥锁。这样可以确保在执行打印操作时,只有一个线程能够访问 std::cout,避免输出混乱。
请注意,在 unique_lock 对象离开作用域后,互斥锁会被自动释放,不需要手动调用 unlock() 方法。
阅读全文