unique_lock 用例
时间: 2023-11-25 19:06:07 浏览: 86
unique_lock是C++中的一个互斥锁封装类,它提供了更多的灵活性和功能,相比于lock_guard。下面是一个使用unique_lock的示例:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker()
{
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; }); // 等待条件变量满足
std::cout << "Worker thread is running." << std::endl;
}
int main()
{
std::thread t(worker);
std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟一些耗时操作
{
std::lock_guard<std::mutex> lock(mtx);
ready = true; // 设置条件变量为true
}
cv.notify_one(); // 通知等待的线程
t.join();
return 0;
}
```
在上面的示例中,我们创建了一个worker线程,它会等待条件变量ready为true。在主线程中,我们使用unique_lock来锁定互斥锁,并设置ready为true,然后通过notify_one()通知等待的线程。这样,worker线程就会被唤醒并执行相应的操作。
需要注意的是,unique_lock可以在锁定期间多次解锁和重新锁定,而lock_guard只能在构造和析构期间锁定和解锁。这使得unique_lock更加灵活,可以在需要的时候手动控制锁定和解锁的时机。
阅读全文