c++11 std::unique_lock

std::unique_lock

  • 用法类似lock_guard,离开作用域后自动unlock
  • 定义的时候可以不需要mutex初始化,可以为空
  • 可以手动调用lock(),unlock()
// unique_lock example
#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <mutex>          // std::mutex, std::unique_lock
#include <chrono>
using namespace std;
std::mutex mtx;           // mutex for critical section

void print_block (int n, char c) {
  // critical section (exclusive access to std::cout signaled by lifetime of lck):
  std::unique_lock<std::mutex> lck (mtx);
  for (int i=0; i<n; ++i) { std::cout << c; }
  // lck.unlock(); // 可以手动释放锁
  // lck.lock();   // 可以再次加锁
  std::this_thread::sleep_for(1s);
  std::cout << '\n';
}

void UniqueLockTest()
{
  std::thread th1 (print_block,50,'*');
  std::thread th2 (print_block,50,'$');

  th1.join();
  th2.join();
}

参考

https://en.cppreference.com/w/cpp/thread/unique_lock
https://cplusplus.com/reference/mutex/unique_lock/

posted @   BuzzWeek  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示