unique_lock是lock_guard的加强版,它具有 lock_guard 的所有功能,同时具有如下特点:
- 创建时可以不锁定(通过指定第二个参数为std::defer_lock)
- 可以随时加锁解锁(通过lock,try_lock, unlock)
- 允许延迟锁定(通过try_lock_for),限时锁定(通过 try_lock_until)
- 不可复制,可移动(通过移动构造函数或移动赋值函数转移所有权)
- 可以主动释放所有权(通过release)
- 作用域规则同 lock_grard,析构时自动释放锁
- 条件变量需要该类型的锁作为参数
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex mtx;
void print_block (int n, char c)
{
unique_lock<mutex> lck (mtx);
for (int i=0; i<n; ++i)
{
cout << c;
}
cout << endl;;
}
int main ()
{
std::thread th1 (print_block, 50, '*');
std::thread th2 (print_block, 50, '$');
th1.join();
th2.join();
return 0;
}
运行
订阅专栏 解锁全文
359

被折叠的 条评论
为什么被折叠?



