C++为什么不要拿着锁调用未知代码

技术C++为什么不要拿着锁调用未知代码本篇内容主要讲解“C++为什么不要拿着锁调用未知代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++为什么不要拿着锁调用未知代码”吧

本文主要讲解“C为什么不用锁调用未知代码”,感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖学会“C为什么不用锁调用未知代码”!

CP.22:永远不要拿着锁调用未知代码(例如callback)

Reason(原因)

如果你不知道一段代码是做什么的,你就有陷入死锁的风险。

如果你不知道一段代码会做什么,你将面临死锁的风险。

Example(实例)

void do_this(Foo* p)

{

lock _ guard mutex lck { my _ mutex };

//.做某事.

p-act(my _ data);

//.

}如果你不知道Foo:act会做什么(可能这是一个会调用派生类成员的虚函数),它也可能(递归)调用do_this,导致my_mutex死锁。它还可能锁定另一个互斥体,并且无法在合理的时间内返回它,从而导致调用do_this的所有代码的延迟。

Example(示例)

调用未知代码导致的问题的一个常见例子是,被调用的函数试图在锁定状态下重新访问对象。这个问题通常可以通过使用可重入递归互斥来解决。示例:

递归_ mutex my _ mutex

模板类型名称操作

做某事(行动f)

{

unique _递归_ mutex lck { my _ mutex };

//.做某事.

f(这个);//f将对此做一些事情

//.

}如果f()调用了*this上的操作,我们必须确保对象的不变量在调用之前保持不变。

如果,因为f()可能针对*这个调用操作,我们必须确保在调用之前对象是不变量的。

Enforcement(实施建议)

用非递归函数调用虚函数的标志

标记调用包含不可重入互斥体的虚拟函数的情况。

用非递归函数调用回调的标志

标记调用持有不可重入互斥锁的回调函数的情况。

至此,相信大家对“C为什么不用锁调用未知代码”有了更深的理解,那么就让我们在实践中去做吧!这是网站。更多相关内容,可以去相关渠道查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/116967.html

(0)

相关推荐

  • 如何使用Hibernate+Struts实现J2EE应用开发

    技术如何使用Hibernate+Struts实现J2EE应用开发这篇文章主要为大家展示了“如何使用Hibernate+Struts实现J2EE应用开发”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大

    攻略 2021年12月8日
  • 猪宝宝小名,我想帮宝宝取个好听的小名

    技术猪宝宝小名,我想帮宝宝取个好听的小名姓名,记录着宗族血统的烙印,凝聚着父母对孩子的深情厚义,隐喻着不同的理想追求和目标;姓名,传承了人的情、意、志;姓名,蕴含了人的精、气、神猪宝宝小名。人的姓名不只是一个人体符号,而

    生活 2021年10月30日
  • 饺子怎么煮,如何煮饺子,加多少水好呢

    技术饺子怎么煮,如何煮饺子,加多少水好呢1饺子怎么煮、将锅中加入3000ml 水,然后点火开始烧水,烧水过程中可以往锅中添加2勺食盐,目的防止饺子粘锅。2、水开锅之后,将包好的水饺倒入其中,轻微的搅拌,防止饺子皮黏住锅底

    生活 2021年10月20日
  • Floyd 算法学习笔记

    技术Floyd 算法学习笔记 Floyd 算法学习笔记Floyd算法学习笔记(未完结)
    前言
    如有错误,欢迎各位 dalao 批评指出。
    前置芝士:
    1.邻接矩阵(Floyd要用邻接矩阵存图)
    2.动态

    礼包 2021年11月18日
  • Windows 11 企业版

    技术Windows 11 企业版 Windows 11 企业版 - 20 GB 下载:微软官方原版Windows11企业版原生含子系统、Visual Studio 2019 虚拟机镜像20GB 下载即用

    礼包 2021年12月1日
  • fabricca配置文件详细说明(fabric-ca设置账户使用期限)

    技术Fabric CA创建用户机制的示例分析这篇文章给大家分享的是有关Fabric CA创建用户机制的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在研究Fabric CA 创建用户,

    攻略 2021年12月25日