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

linux-----------------锁

1 常见的锁概念

1-1 死锁

死锁是指在⼀组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站⽤不会
释放的资源⽽处于的⼀种永久等待状态。
所谓死锁就是我在申请一把锁的时候我持有这个锁然后我没有释放的情况下又去申请了一把锁这种情况就会导致死锁
造成的结果是
1-2 死锁得四个必要条件
互斥条件 一个资源每次只能被一个执行流使用
请求与保持条件
一个执行流因申请资源而堵塞时,对持有的资源也不进行释放
不剥夺条件:⼀个执⾏流已获得的资源,在末使⽤完之前,不能强⾏剥夺
循环等待条件:若⼲执⾏流之间形成⼀种头尾相接的循环等待资源的关系
1-3 避免死锁
避免死锁有4个条件
条件1: 锁排序(破坏循环等待)
// 通过内存地址强制排序
void safe_op(std::mutex& mtxA, std::mutex& mtxB) {auto& first = std::min(&mtxA, &mtxB, std::less<void*>());auto& second = std::max(&mtxA, &mtxB, std::less<void*>());std::lock_guard<std::mutex> lk1(*first);std::lock_guard<std::mutex> lk2(*second);// 安全操作共享资源
}

条件2 RAII守卫 + 作用域控制(自动释放)

{std::lock_guard<std::mutex> lk1(mtx1); // 自动释放// 操作资源1...{ // 限制锁作用域std::lock_guard<std::mutex> lk2(mtx2);// 操作资源1+2...} // lk2自动解锁// 此处仅持有mtx1
} // lk1自动解锁

条件3 原子操作替代锁(避免互斥)

std::atomic<int> counter(0);// 无锁自增
void safe_increment() {counter.fetch_add(1, std::memory_order_relaxed);
}

条件4 标准库联合锁(破坏持有并等待)

#include <mutex>void safe_transaction() {std::lock(mtx1, mtx2); // 原子化锁定多个互斥量std::lock_guard<std::mutex> lk1(mtx1, std::adopt_lock);std::lock_guard<std::mutex> lk2(mtx2, std::adopt_lock);// 安全操作双资源
} // 自动解锁

http://www.xdnf.cn/news/1303363.html

相关文章:

  • mysql启动超时
  • 本地生活|MallBook 分账赋能浙江本地生活服务平台,助力实现资金流转效率与合规性的双提升!
  • 高通vendor app访问文件
  • LeetCode hot 100 day2
  • AAAI爆款:目标检测新范式,模块化设计封神之作
  • 办公效率提升指南:完成重复任务自动化
  • 【自动化测试】通过AI技术如何自动建设接口自动化用例(有关必回)
  • GPT-5 官方前瞻:它将如何重塑你的数字生活?
  • 5G赋能井下“毛细血管”:巴拉素煤矿零散排水点智能监控系统
  • [激光原理与应用-283]:理论 - 波动光学 - 电磁波概述
  • 架构需求规格说明(ARD):项目成功的隐形引擎
  • 【nginx端口】修改nginx全局模块、子模块配置,重启后依然监听80端口
  • YOLOv8目标检测网络结构理论
  • 笔试——Day39
  • DevEco Studio 6.0.0 元服务页面跳转失败
  • Spring事物
  • 智能座舱软件架构设计的宏观决策框架
  • 【自动驾驶】自动驾驶概述 ② ( 自动驾驶技术路径 | L0 ~ L5 级别自动驾驶 )
  • 数据结构:二叉树的表示方式(Representation of Binary Trees)
  • 【测试工具】JMeter基本使用及MySQL数据库压力测试
  • Baumer高防护相机如何通过YoloV8深度学习模型实现驾驶员疲劳的检测识别(C#代码UI界面版)
  • python的美食交流社区系统
  • @[TOC](计算机是如何⼯作的) JavaEE==网站开发
  • 前端性能优化工具Performance面板实战指南
  • 【swift开发】SwiftUI概述 SwiftUI 全面解析:苹果生态的声明式 UI 革命
  • 【C#补全计划】事件
  • 【2D】圆上数值积分(半径方向用高斯积分减少点数)
  • 综合案例:Python 函数知识整合 — 学生成绩管理系统
  • Python 类(Class)学习
  • 【新手入门】Android基础知识(一):系统架构