当前位置: 首页 > news >正文

论坛网站制作/手机怎么做网站免费的

论坛网站制作,手机怎么做网站免费的,做视频网站挣钱吗,给微商做批发的网站C 并发编程,std::unique_lock与std::lock_guard区别示例 背景 平时看代码时,也会使用到std::lock_guard,但是std::unique_lock用的比较少。在看并发编程,这里总结一下。方便后续使用。 std::unique_lock也可以提供自动加锁、解…

C++ 并发编程,std::unique_lock与std::lock_guard区别示例

背景

平时看代码时,也会使用到std::lock_guard,但是std::unique_lock用的比较少。在看并发编程,这里总结一下。方便后续使用。

std::unique_lock也可以提供自动加锁、解锁功能,比std::lock_guard更加灵活。

std::lock_guard

std::lock_guard是RAII模板类的简单实现,功能简单。

1.std::lock_guard 在构造函数中进行加锁,析构函数中进行解锁。
2.锁在多线程编程中,使用较多,因此c++11提供了lock_guard模板类;在实际编程中,我们也可以根据自己的场景编写resource_guard RAII类,避免忘掉释放资源。

下面是一个使用std::lock_guard的代码例子,1+2+ .. + 100的多线程实现,每个num只能由一个线程处理。:

#include <thread>
#include <mutex>
#include <vector>
#include <iostream>
#include <algorithm>std::mutex my_lock;void add(int &num, int &sum){while(true){std::lock_guard<std::mutex> lock(my_lock);  if (num < 100){ //运行条件num += 1;sum += num;}   else {  //退出条件break;}   }   
}int main(){int sum = 0;int num = 0;std::vector<std::thread> ver;   //保存线程的vectorfor(int i = 0; i < 20; ++i){std::thread t = std::thread(add, std::ref(num), std::ref(sum));ver.emplace_back(std::move(t)); //保存线程}   std::for_each(ver.begin(), ver.end(), std::mem_fn(&std::thread::join)); //joinstd::cout << sum << std::endl;
}

std::unique_lock

类 unique_lock 是通用互斥包装器,允许延迟锁定、锁定的有时限尝试、递归锁定、所有权转移和与条件变量一同使用
unique_lock比lock_guard使用更加灵活,功能更加强大。
使用unique_lock需要付出更多的时间、性能成本。

下面是try_lock的使用例子。

#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <mutex>          // std::mutex, std::unique_lock
#include <vector>std::mutex mtx;           // mutex for critical section
std::once_flag flag;void print_block (int n, char c) {//unique_lock有多组构造函数, 这里std::defer_lock不设置锁状态std::unique_lock<std::mutex> my_lock (mtx, std::defer_lock);//尝试加锁, 如果加锁成功则执行//(适合定时执行一个job的场景, 一个线程执行就可以, 可以用更新时间戳辅助)if(my_lock.try_lock()){for (int i=0; i<n; ++i)std::cout << c;std::cout << '\n';}
}void run_one(int &n){std::call_once(flag, [&n]{n=n+1;}); //只执行一次, 适合延迟加载; 多线程static变量情况
}int main () {std::vector<std::thread> ver;int num = 0;for (auto i = 0; i < 10; ++i){ver.emplace_back(print_block,50,'*');ver.emplace_back(run_one, std::ref(num));}for (auto &t : ver){t.join();}std::cout << num << std::endl;return 0;
}

参考

  • https://blog.csdn.net/allen807733144/article/details/73604163
  • http://zh.cppreference.com/w/cpp/thread/unique_lock
http://www.jmfq.cn/news/5051701.html

相关文章:

  • 江苏seo推广网站建设/怎么做互联网营销推广
  • 电子商务有限公司/360seo优化
  • 做网站怎么跟客户谈话/114啦网址导航官网
  • 门户网站建设 管理 自查报告/市场营销策划方案模板
  • 企业网站信息管理系统/百度seo排名点击软件
  • 做问卷赚钱的网站/百度推广的优势
  • 云匠网接单靠谱么/seo网站快速排名
  • 青岛网站权重提升/搜索引擎营销方案例子
  • 程序员自己做项目的网站/应用市场
  • 基金会网站开发方案/平台推广文案
  • wampserver做动态网站/爱站网排名
  • 几个网站一个空间 怎么做邮箱/北京营销公司比较好的
  • 河南郑州做网站h汉狮/拉人头最暴利的app
  • 广州正规网站建设公司/专业培训心得体会
  • 嘉兴地区有人做网站吗/网站seo基础
  • 政府网站建设年终总结/seo效果检测步骤
  • 牡丹江地区做网站的公司/策划方案怎么做
  • 政府网站集约建设方案/bilibili官网网页入口
  • 做网站充值犯法吗/抖音营销软件
  • 网站要做手机版怎么做/做一个企业网站大概需要多少钱
  • 商务网站页面设计技术/建设公司网站大概需要多少钱?
  • 网站备案找哪个部门/最新军事动态最新消息
  • 找公司开发网站/制作一个简单的html网页
  • 济源建设企业网站公司/网站数据分析
  • 东昌府网站建设公司/社交网络推广方法
  • wordpress内链插件/宝鸡seo外包公司
  • 网站备案帐号/seo赚钱项目
  • 网上学编程的有哪些比较好的网站/网络推广与优化
  • 做动态表情包的网站/西安今日头条新闻
  • 淄博网站制作建设/网络推广公司方案