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

C++11--锁分析

C++11--锁分析

  • 1 介绍
  • 2 锁嵌套问题
    • 示例
    • 解决方案一:使用分层锁设计,避免嵌套
    • 解决方案二:重构设计,避免方法间互相调用受锁保护的操作
    • 解决方案三:使用递归锁(不推荐,除非确实需要)

1 介绍

互斥量(mutex)类型,用于线程同步,防止数据竞争(data race)。

2 锁嵌套问题

示例

class Motor
{
public:void api_1{} {mutex.lock();// do somethingapi_2{}mutex.unlock();}void api_2{} {mutex.lock();// do somethingmutex.unlock();}private:mutex mutex;
}

解决方案一:使用分层锁设计,避免嵌套

class Motor {
public:void api_1() {std::lock_guard<std::mutex> lock(mutex);// do something that doesn't call api_2}void api_2() {std::lock_guard<std::mutex> lock(mutex);// do something}private:std::mutex mutex;
};

解决方案二:重构设计,避免方法间互相调用受锁保护的操作

class Motor {
public:void api_1() {std::lock_guard<std::mutex> lock(mutex);// do somethingapi_2_locked();  // 专门为已锁定情况设计的方法}void api_2() {std::lock_guard<std::mutex> lock(mutex);api_2_locked();}private:void api_2_locked() {// 必须在持有锁的情况下调用// do something}std::mutex mutex;
};

解决方案三:使用递归锁(不推荐,除非确实需要)

注意:递归锁通常表明设计有问题,应尽量避免。

class Motor {
public:void api_1() {std::unique_lock<std::recursive_mutex> lock(mutex);// do somethingapi_2(); // 现在可以安全调用}void api_2() {std::unique_lock<std::recursive_mutex> lock(mutex);// do something}private:std::recursive_mutex mutex;
};
http://www.dtcms.com/a/292609.html

相关文章:

  • npm全局安装后,依然不是内部或外部命令,也不是可运行的程序或批处理文件
  • 大数据量查询计算引发数据库CPU告警问题复盘
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第二十二讲)
  • Linux_Ext系列文件系统基本认识(一)
  • Product Hunt 每日热榜 | 2025-07-22
  • “鱼书”深度学习入门 笔记(1)前四章内容
  • day19 链表
  • 【科研绘图系列】R语言绘制柱状堆积图
  • 基于 Vue,SPringBoot开发的新能源充电桩的系统
  • 豪鹏科技锚定 “AI + 固态” 赛道:从电池制造商到核心能源方案引领者的战略跃迁
  • mybatis拦截器实现唯一索引的动态配置
  • 网络基础DAY16-MSTP-VRRP
  • git reset --soft和 git reset --mixed的主要区别
  • 智能制造——解读制造业企业数字化转型实施指南2025【附全文阅读】
  • libgmp库(GNU高精度算术库)介绍
  • 算法训练营day28 贪心算法②122.买卖股票的最佳时机II、55. 跳跃游戏、 45.跳跃游戏II 、1005.K次取反后最大化的数组和
  • Web服务器(Tomcat、项目部署)
  • 0722 数据结构顺序表
  • 循环神经网络--NLP基础
  • <另一种思维:语言模型如何展现人类的时间认知>总结
  • 大型语言模型(Large Language Models,LLM)
  • Science Robotics 机器人成功自主完成猪胆囊切除手术
  • vue3 动态判断 el-table列 用 v-if 是否显示
  • 微算法科技(NASDAQ: MLGO)探索优化量子纠错算法,提升量子算法准确性
  • 4.组合式API知识点(2)
  • 计算机视觉领域的AI算法总结——目标检测
  • C语言:循环结构
  • PePeOnTron上线 Binance Alpha:中文社区正走出自己的Web3之路
  • 基于网络爬虫的在线医疗咨询数据爬取与医疗服务分析系统,技术采用django+朴素贝叶斯算法+boostrap+echart可视化
  • 论文略读:Arcee’s MergeKit: A Toolkit for Merging Large Language Models