最新要闻
- 热点在线丨老车主维权、新客户下单!特斯拉大降价后3天获3万辆订单
- 每日快讯!李斌:我们从来不把自己称作豪华品牌
- 当前观察:百度CreateAI开发者大会:李彦宏称2027前一线城市不再需要限购限行
- 当前热文:炒币亏了3个亿的美图满血复活了:全体员工发股票 搬入新大楼
- 过年微醺 RIO鸡尾酒大促!56元到手10瓶
- 焦点报道:曝iPhone 15开始试产:采用国产灵动岛屏 京东方供货
- 天天看热讯:李想:理想L7小订最大用户群来自特斯拉车主
- 中国新能源汽车补贴13年:投入超1500亿元 覆盖317万辆车
- 天天快看:携程梁建章建议:取消中考 缩短中小学学制 提前2年上班
- 时代变了!日系豪华败走中国:停产停售、官网504、全面退场
- 【天天播资讯】《春晚》收视率史低 2023年很多节目真实生活取材 这次必看
- 全球报道:干掉致命疾病!全球首款蜜蜂疫苗获批
- 转子发动机回归!马自达官宣:增程式版MX-30本月发布
- 环球速读:解决安卓四大不可能 李杰:一加11 16GB流畅用四年
- 环球快资讯:再也不怕侧方停车!现代展示e-Corner系统:还能“坦克掉头”
- 百事通!成了!微信:视频号用户总使用时长接近朋友圈80%
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
最新:5. 使用互斥量保护共享数据
(资料图片仅供参考)
使用互斥量保护共享数据
- C++中使用互斥量
- C++通过实例化
std::mutex
创建互斥量,通过调用成员函数lock()
进行加锁,unlock()
进行解锁,在实践中不推荐直接调用成员函数,因为调用成员函数就意味着,必须记住在每个函数的出口都需要调用unlock()
,同时包括异常的情况,C++中推荐使用lock_guard
实例对数据进行保护 ,lock_guard
和mutex
都在
头文件中进行声明
上述代码中使用全局变量进行保护,通常情况下没有问题,但是大多情况下,互斥量和保护的数据放在同一个类中。当一个成员函数返回的是保护数据的指针的或者引用的时候,会破坏数据的保护,具有访问能力的指针或者引用可以访问或者修改被保护的数据,而不会被互斥锁限制,因此在设计互斥量的时候需要能够锁住任何数据的访问方式,不留后门#include
- #include
std::list li;std::mutex li_mutex;void add_to_list(int num){std::lock_guard guard(li_mutex);li.push_back(num);}bool list_contain(int value_to_find){std::lock_guard guard(li_mutex);return std::find(li.begin(),li.end(),value_to_find) != li.end();} - C++通过实例化
- 精心组织代码来保护共享数据
- 在确保成员函数不会传出指针或者引用的同时,检查成员函数是否通过指针或者引用的方式了来调用同样重要,函数可能在没有互斥量保护的地方存储这指针或者引用,例如如下代码:
上述代码中,虽然有互斥锁的保护,但是foo中的数据依旧通过指针被传递给了danger_pointer,切记不要将受保护的数据的指针或者 引用传递到互斥锁的作用和与之外class foo{ private: int data;mutex _mutex; public: template
void dowork(Function func){lock_guard g(_mutex);func(data);}}int * danger_pointer;void danger_func(int & tmp){danger_pointer = &tmp;}int main(){foo f;f.dowork(danger_func);}
- 发现接口内在的条件竞争
- 元素操作在多线程开发中,对于共享资源存在竞争条件,例如上一个线程可能对栈进行了某种判别条件,但是时间片很快切给了下一个线程,可能会导致上一个进程的判别条件发生改变,但是程序不会重复执行判别代码,如下;
在上述例子中,可能第一个进程刚 判断了栈为空,还没进行下面的操作,第二个线程就向栈中添加了元素,第一个线程的判断条件将不在成立,但是仍然会进行下面的操作。stack
sta;void process_1(){if(sta.empty()){...}}void process_2(){sta.push(...);}int main(){thread t1(process_1);thread t2(process_2);t1.join();t2.join();}
- 多线程中的元素转移问题举个例子,假设有一个stack
>,当vector中有大量元素的时候,拷贝其中的内容可能会发生bad_alloc的异常,如果此时调用stack中的pop方法,可能造成栈顶元素确实从栈中弹出,但是并没有足够的空间对其进行拷贝,这个时候,有就会丢失,基本的解决办法就是先拷贝,再弹出,这样又会产生空间不足的问题。针对这种问题,有如下几个方法可以进行解决。 - 传入一个引用将变量的引用作为参数传递到pop函数当中
std::vector
res;sta.pop(res);此处pop函数具体如下:void pop(vector & res){lock_guard loc(m);if(sta.empty())throw empty_stack();res = data.top();data.pop();} - 返回弹出值的指针返回指针和返回引用的原理是一样的
auto ptr = sta.pop();此处pop函数的具体实现如下:std::shared_ptr
pop(){std::loc_guard loc(m);if(data.empty()) throw empty_stack();shared_ptr const res(std::make_shared (data.top()));return res;}
- 死锁问题死锁产生的四个必要条件分别为1. 互斥条件 2. 不可剥夺条件 3. 请求和保持条件 4. 循环等待条件
互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源。以上给出了导致死锁的四个必要条件,只要系统发生死锁则以上四个条件至少有一个成立。事实上循环等待的成立蕴含了前三个条件的成立,似乎没有必要列出然而考虑这些条件对死锁的预防是有利的,因为可以通过破坏四个条件中的任何一个来预防死锁的发生。————————————————版权声明:本文为CSDN博主「Hyacinth_Dy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/jyy305/article/details/70077042
死锁的避免方法如下:
- 避免嵌套所
- 避免在持有锁的时候调用用户提供的代码
- 按照一定的顺序上锁
- 使用锁的层次结构对于这个方法,他的意思是对每个锁进行级别标注,当低层次的锁被锁上的时候,高层次的锁不允许上锁,原理类似于按一定的顺序上锁
-
环球新消息丨【Python爬虫实战项目】Python爬虫批量下载相亲网站数据并保存本地(附源码)
前言今天给大家介绍的是Python爬虫批量下载相亲网站图片数据,在这里给需要的小伙伴们代码,并且给出一...
来源: 最新:5. 使用互斥量保护共享数据
环球新消息丨【Python爬虫实战项目】Python爬虫批量下载相亲网站数据并保存本地(附源码)
天天快看:什么是堆叠面积图?
热点在线丨老车主维权、新客户下单!特斯拉大降价后3天获3万辆订单
每日快讯!李斌:我们从来不把自己称作豪华品牌
当前观察:百度CreateAI开发者大会:李彦宏称2027前一线城市不再需要限购限行
当前热文:炒币亏了3个亿的美图满血复活了:全体员工发股票 搬入新大楼
过年微醺 RIO鸡尾酒大促!56元到手10瓶
软件开发入门教程网之MySQL NULL 值处理
环球关注:【首页】商品列表和单个商品组件封装
焦点报道:曝iPhone 15开始试产:采用国产灵动岛屏 京东方供货
天天看热讯:李想:理想L7小订最大用户群来自特斯拉车主
中国新能源汽车补贴13年:投入超1500亿元 覆盖317万辆车
13种Shell逻辑与算术,能写出5种算你赢!
提升代码可读性,减少if-else的几个小技巧
天天快看:携程梁建章建议:取消中考 缩短中小学学制 提前2年上班
时代变了!日系豪华败走中国:停产停售、官网504、全面退场
焦点速看:DOS初识
【天天播资讯】《春晚》收视率史低 2023年很多节目真实生活取材 这次必看
全球报道:干掉致命疾病!全球首款蜜蜂疫苗获批
转子发动机回归!马自达官宣:增程式版MX-30本月发布
环球速读:解决安卓四大不可能 李杰:一加11 16GB流畅用四年
环球快资讯:再也不怕侧方停车!现代展示e-Corner系统:还能“坦克掉头”
ElasticSearch必知必会-基础篇
环球快报:火山引擎 DataLeap 通过中国信通院测评,数据管理能力获官方认可!
全球速递!开源动物行为分析实验箱(斯金纳箱)需求调研分析
世界看点:低代码开发:释放数字化生产力
文件IO操作开发笔记(二):使用Cpp的ofstream对磁盘文件存储进行性能测试以及测试工具
百事通!成了!微信:视频号用户总使用时长接近朋友圈80%
天天要闻:开袋即食 一口弹牙 大牌优形肉肠0.99元/根(商超2.5元)
快资讯:期待!《生化危机4:重制版》威斯克或将登场
特斯拉门店:降价维权后销量翻倍!全国一天提车量超1万台
2023支付宝集五福最全攻略 神秘玩法千万别错过
琥珀银杏果是什么东西?琥珀银杏果是什么地方的菜?
兵长一米六是什么意思?兵长一米六顺口溜
美髯公指的是谁?美髯公是什么意思?
金坷垃是什么意思?金坷垃是什么时候的梗?
肥皂水是碱性还是酸性?肥皂水的主要化学成分是什么?
主角叫萧破天的小说有哪些?主角叫萧破天的全部小说
转世仁波切是什么意思?转世仁波切怎么认证?
电信拨打长途前面加什么?电信拨打长途要钱吗?
今日最新!金子塔图,自定义图表,伪漏斗图
环球今日报丨Codeforces 1704 F Colouring Game 题解 (结论,SG函数)
dnf武极觉醒技能怎么点?DNF武极觉醒技能介绍
倒角外倒角内倒角怎么区分?倒角外倒角内倒角的区别有哪些?
申怡走进云南白沙湾小学开讲公益语文课 用语文点亮希望的灯火
【新视野】专心打造小米汽车!雷军已卸任多家小米旗下公司职务
天天新资讯:《中国奇谭》爆火出圈!淘宝周边已卖断货 网友建议快出小野猪毛刷
世界速看:特斯拉二把手上位之路:朱晓彤如何打动马斯克?
环球资讯:比特斯拉多卖40万辆 比亚迪提前锁定2022年全球新能源销冠
【环球热闻】日志瘦身骚操作:从 5G 优化到 1G。
重磅发布丨从云原生到 Serverless,先行一步看见更大的技术想象力
世界简讯:rsync使用技巧
最新快讯!美国要给飞机安装5G信号屏蔽仪:避免影响航空安全
足坛再无“大圣” 33岁老将贝尔宣布退役
世界报道:2023年世界航天首次失利!英国维珍轨道火箭异常:9颗卫星没了
极狐考拉发布首款智能亲子车:有侧滑门、自带电子安全座椅
你集齐五福了吗?扫这张图能拿额外福卡 每天都有
【全球新要闻】劳斯莱斯2022年销量刷百年纪录!土豪都喜欢定制车
【天天聚看点】1.47英寸大屏、14天续航!Redmi手环2年货节优惠:仅159元
当前热门:腾讯股价翻倍 港股又香了 2023年首只爆款基金20亿一天卖完
全球观热点:联合国:地球臭氧层有望在40年内恢复 已步入正轨
环球即时看!国外小伙买世界最亮手电筒 网友:天已亮 该去上班了
天天微动态丨清华教授:互联网公司很难形成垄断了
支付宝“集五福”正式开启:已有2.7万人火速集齐 分5亿红包
天天微速讯:最新安卓手机用户偏好榜:12G内存、512G存储逐渐成主流
每日热文:洛谷P3956. [NOIP2017. PJ]棋盘
Spring IOC官方文档学习笔记(八)之容器扩展点
HTML超文本标记语言4
【环球快播报】茅台董事长丁雄军:买不到茅台还吃不起冰激凌吗?
小米12S Ultra官网缺货!卢伟冰推荐小米13 Pro:影像也非常强
环球快讯:过去10年 全国130多个县第一次通上铁路
环球热门:2.5亿年前 96%的物种突然消失!中国学者有了重大发现
精彩看点:还在用20世纪90年代的破系统!美国航空巨头8天赔掉50个亿
ThreadLocal底层原理
焦点热文:小米13 Pro把单反相机技术塞入手机里!雷军:效果惊艳
AMD三颗新U齐发!锐龙9 7900、锐龙7 7700、锐龙5 7600图赏
暴雪国服代理谈判被曝进入"二选一"阶段:手游版权开发分成是核心
报道:SpaceX猎鹰重型火箭再次发射美军卫星:能抗核打击
环球今热点:在QEMU-KVM环境下部署Oracle 19.16 RAC
全球要闻:HTML超文本标记语言3
苹果中国官网上线智能家居板块:一个LED灯泡卖168元 贵吗?
世界实时:《三体》电视剧过审上微博热搜 网友:只求别魔改!
环球今日报丨去意已决?巴菲特再度减持比亚迪
全球快消息!真爱粉!苏州加油为抢一加11首发跑到上海:对新品非常期待
世界观速讯丨C++引用【cherno课程学习】
【天天报资讯】「年终总结」写了 3 年文章的我,昨天第一次露脸直播。
环球今日报丨【前端调试】- 利用 Performance 和 Memory 分析内存
热点!操作系统 — 精髓与设计原理(第一章 计算机系统概述)
世界播报:学习笔记——Mybatis映射文件根标签与子标签
全球即时看!又一豪华巨头败走中国 官网关停!长安终于可以独享车标了
环球新消息丨广告又来?Win11将在文件管理器显示“推荐内容”
AMD锐龙7000新U不讲武德:编号更高 频率反而更低
车企"英文+数字"的新车命名规则被吐槽无趣 不如中文
外星人M18首发!京东方推出18英寸480Hz笔记本屏
全球热议:java不同版本jdk切换
每日焦点!读博初始心境-求讨论
前沿热点:抖音2023年春节红包来了:分4亿 最高可得万元奖金
环球快看点丨彻底终结充电焦虑?韩国SK On新技术:汽车电池18分钟充满
世界微资讯!电竞手机要消亡!卢伟冰:有了Redmi K60就不需要电竞手机