一生一世学坛

 找回密码
 立即注册
搜索
查看: 3689|回复: 0
打印 上一主题 下一主题

C++unique_lock锁的使用

[复制链接]

334

主题

385

帖子

6830

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6830
跳转到指定楼层
楼主
发表于 2021-1-28 17:45:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. unique_lock功能比lock_gard更加灵活强大,缺点是使用成本更高一些。
复制代码
  1. #include <iostream>
  2. #include <thread>
  3. #include <mutex>
  4. #include <vector>
  5. #include <chrono>

  6. std::timed_mutex g_timed_mutex;

  7. void func(int val)
  8. {
  9.     std::unique_lock<decltype(g_timed_mutex)> lockguard(g_timed_mutex,std::defer_lock);
  10.     //std::cout<<std::this_thread::get_id()<<"owns the lock... "<<lockguard.owns_lock()<<std::endl;
  11.     while(!lockguard.try_lock_for(std::chrono::seconds(val)))
  12.     {
  13.         std::cout<<std::this_thread::get_id()<<" failed to access the lock..."<<std::endl;
  14.         //return;
  15.     }

  16.     std::cout<<"now, "<<std::this_thread::get_id()<<" owns the lock..."<<lockguard.owns_lock()<<std::endl;
  17.     std::this_thread::sleep_for(std::chrono::seconds(val));
  18. }

  19. int main()
  20. {
  21.     std::vector<std::thread> vec_threads;
  22.     for(int i = 0; i<10; i++)
  23.     {
  24.         std::thread th(func,i+1);
  25.         vec_threads.push_back(std::move(th));
  26.     }

  27.     for(int i =0; i<vec_threads.size();i++)
  28.     {
  29.         if(vec_threads[i].joinable())
  30.         {
  31.             vec_threads[i].join();
  32.         }
  33.     }

  34.     std::cout<<"program ends..."<<std::endl;

  35. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|分享学习  

GMT+8, 2024-5-17 13:43 , Processed in 0.045267 second(s), 6 queries , File On.

声明:本站严禁任何人以任何形式发表违法言论!

本站内容由网友原创或转载,如果侵犯了您的合法权益,请及时联系处理!© 2017 zamxqun@163.com

皖公网安备 34010402700634号

皖ICP备17017002号-1

快速回复 返回顶部 返回列表