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

c++介绍锁 一

死锁如何产生的:两个或者多个线程,互相等待对方释放资源,从而导致进程或者线程无法继续执行的现象。

造成死锁的条件:

1.互斥条件(Mutual Exclusion):资源一次只能被一个线程占用。

2.请求保持条件(Hold and Wait):线程已经持有至少一个资源,同时又申请新的资源,而新资源被其他线程占有。

3.不剥夺条件(No Preemption): 已获得的资源在未使用完之前,不能被强行剥夺,只能使用完毕后由线程自己释放。

4.循环等待条件:存在一个线程循环等待链,链中的每个线程持有下一个线程所需资源。

如何解决死锁

1:避免循环等待条件:避免形成资源循环等待=链。例如,可以对所有资源进行排序,并按照顺序申请资源,确保不会形成循环等待。

2.破坏请求保持条件:在一个线程申请资源时,不允许它同时持有其他资源。可以使用一次性分配所有资源方法,即线程一次申请它所需要的所有资源,只有在所有资源都满足情况下才开始执行,否则就释放已经获得的资源重新申请。

3.破坏不剥夺条件:如果一个线程申请新的资源时已持有的资源被占用,可以强制释放它已占有的资源。尽管这种方法在实际系统很难实现,但某些情况下是可行的。

4.使用死锁检测和恢复:系统可以定期检测是否存在死锁,如果检测到死锁,即采取恢复措施,例如,终止某些线程并且释放它们占有资源。

5。使用高级同步工具:使用lock和unique_lock等高级同步工具来避免死锁。lock可以同时锁定多个互斥锁。


http://www.kler.cn/a/585758.html

相关文章:

  • ECU BootLoader开发——Flash编程
  • 【SpringMVC】入门版
  • 【CXX】6.8 Vec<T> — rust::Vec<T>
  • 渗透测试工具之Empire Framework
  • 交互式调度算法学不会?————一文学懂(RR(时间片轮转调度算法),优先级调度算法,多级反馈队列调度算法)保姆式解析
  • DPU的架构:模块化与可扩展性
  • MFC控件按钮的使用
  • 破局企业数据泄露风险:安当TDE透明加密重塑文件服务器安全防线
  • Flutter+Rust Android, IOS移动端适配通用流程及依赖库处理(Openssl, Curl等)
  • 百度百科更新!树莓集团宜宾项目的深远影响与意义
  • leetcode hot100贪心
  • LeetCode hot 100—滑动窗口最大值
  • win32汇编环境,对话框程序中创建托盘示例一
  • PyTorch 系列教程:探索自然语言处理应用
  • 基于RWA 与 AI-Agent 协同的企业数字化生态构建
  • Go语言环境搭建并执行第一个Go程序
  • X86 RouterOS 7.18 设置笔记十:上海电信IPTV使用msd_lite实现组播转单拨
  • C++小课堂——friend友元
  • 基础知识《DICT协议》
  • 路由器配置命令