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

马关县网站建设wordpress关闭注册发邮件

马关县网站建设,wordpress关闭注册发邮件,wordpress 获取作者,网络传媒公司多线程同步 引言总述详情互斥锁示例运行结果分析条件变量示例一实现分析优化运行结果示例二实现代码运行结果示例三实现代码运行结果读写锁示例实现代码注意分析运行结果附言实现运行结果运行结果个人心得引言 项目中使用多线程,会遇到两种问题,一种是对共享资源的访问时需要… 多线程同步 引言总述详情互斥锁示例运行结果分析 条件变量示例一实现分析优化运行结果 示例二实现代码运行结果 示例三实现代码运行结果 读写锁示例实现代码注意分析运行结果 附言实现运行结果运行结果个人心得 引言 项目中使用多线程,会遇到两种问题,一种是对共享资源的访问时需要考虑多线程竞争访问导致的不是预期的结果,另一种是多线程之间需要同步的问题。其实质归根结底就是多线程之间的同步。 本文主要在C++11的基础之上,结合示例讲述多线程同步的几种方法。 本文为上篇。 总述 C++中多线程同步的方式分为: 互斥锁,条件变量,读写锁,信号量,future和promise,原子操作,线程局部存储。 详情 下面根据上面提到的七种线程同步的方式分别给出示例。 互斥锁 互斥锁用于解决多线程间对共享资源的竞争问题,具有排它性。一旦一个线程获取锁,并加锁,其他的线程只能阻塞等待该线程解锁之后再抢占锁,且每次只能有一个线程获得锁,没有获得锁的线程只能阻塞等待。 示例 下面是互斥锁的示例: #include iostream #include thread #include mutexusing namespace std; mutex g_mutex;void fun(int n,const char c) {g_mutex.lock();cout "子线程的线程id:" this_thread::get_id()"开始执行该线程......" endl;for (int i = 0; i n;++i) {cout c;}cout endl;cout this_thread::get_id()"子线程结束" endl;g_mutex.unlock(); }int main() {thread t1(fun,5,'S');thread t2(fun,6,'*');t1.join();t2.join();cout "主线程的id:" this_thread::get_id() endl;return 0; }运行结果 分析 上面的示例创建了两个子线程,执行相同的线程处理函数,这就涉及到多线程对共享资源的竞争问题,这里两个子线程都抢着调用线程处理函数fun。由于何时加锁,在哪里加锁,需要结合开发人员的实际需求而定。这个示例希望程序能够输出完整的一个子线程调用fun函数后的内容,所以在刚进入线程处理函数和离开线程处理函数的时候进行加锁和解锁。 若是希望只给fun函数中的循环打印部分加锁,可以这样修改(只修改线程处理函数fun加锁,解锁位置,其它不变): void fun(int n,const char c) {cout "子线程的线程id:" this_thread::get_id()"开始执行该线程......" endl;g_mutex.lock();for (int i = 0; i n;++i) {cout c;}g_mutex.unlock();cout endl;cout this_thread::get_id()"子线程结束" endl; }执行的结果: 可以看到上面的示例,变动了加锁和解锁的位置之后,很明显的出现了资源竞争,输出后结果出现了混乱。当然输出结果也会出现很多种,无法确定。像下面这样,是再次运行被修改加锁和解锁的位置之后的运行结果。 也可能是这样的运行结果: 对于加锁的部分,当前获取锁的子线程可以保证其连续执行,但是不加锁的部分就会出现资源竞争抢占,最终两个子线程的同一个线程处理函数fun中不加锁的内容会穿插着输出,达不到想要的效果。 条件变量 条件变量需要与互斥锁搭配使用来达到想要的效果。 示例一 实现 下面是实现代码: #include iostream #include thread #include mutex #include condition_variableusing namespace std; mutex g_mutex; condition_variable g_cond; bool IsReady = false; const int g_num = 10;void fun(int n) {unique_lockmutex lock(g_mutex);while (!IsReady) {cout "线程被阻塞....." endl;g_cond.wait(lock);}cout "线程" this_thread::get_id()"执行完成!" endl; }void wakeUp() {this_thread::sleep_for(chrono::milliseconds(2));//延迟2毫秒,为了让子线程出现阻塞等待的过程unique_lockmutex lock(g_mutex);IsReady = true;cout
http://www.pierceye.com/news/111321/

相关文章:

  • 郑州哪家公司给国外做网站闵行网站推广
  • 微网站 开发提供坪山网站建设
  • 狗狗和人做网站centos6搭建wordpress
  • 培训教育学校的网站建设方案vx小程序怎么制作
  • 泉州网站建设优化公司酒店网络营销推广方案
  • 重庆潼南网站建设公司电话crm客户关系管理平台
  • 怎么做可以访问网站连接加密东莞++网站建设
  • 企业网站的建设与流程数据分析师要学什么课程
  • 重庆营销型网站随做的好谷歌广告投放教程
  • 个人公众号做网站广州市车管所网站建设
  • 上海网站建设公司排名王也诸葛青cp
  • 常用的设计网站有哪些wordpress如何汉化主题
  • 深圳全网营销型网站免费做调查的网站有哪些
  • 设计素材网站知乎济南seo网站推广
  • 网站建设类岗位杭州国家电网 两学一做 网站
  • html静态网站开发自我介绍网站手机客户端开发教程
  • 营销型网站是什么样的桂林北站有核酸检测点吗
  • 网站未备案被阻断怎么做it培训机构哪个好一点
  • 重庆建设注册执业中心网站网络营销百度百科
  • app网站怎么下载个人备案做视频网站
  • 西宁建一个网站公司广东网站备案
  • 网站数据比较北京网站优化推广公司
  • 想做网站的客户在哪找美间在线设计平台
  • 网站设计规划的目的和要求营销外贸网站建设案例
  • 网站营销力一级a做爰片2017免费网站
  • 昌图网站网页界面设计的要求
  • 做一个网站赚钱什么 门户网站
  • 中国建设银行购物网站帝国织梦wordpress
  • 瑞安网站网站建设松原公司做网站的流程
  • 做网站按页面收费视频解析网站如何做搜索