C++:递归锁——有啥缺点吗?

Posted

技术标签:

【中文标题】C++:递归锁——有啥缺点吗?【英文标题】:C++: Recursive locks - are there any drawbacks?C++:递归锁——有什么缺点吗? 【发布时间】:2020-11-16 20:48:25 【问题描述】:

背景:我有几个线程应该访问共享数据。其中一个线程可能会锁定一个互斥锁,并且在互斥块内,(同一线程的)某些函数可能会再次调用同一个锁。

-我不想创建很多互斥锁

-我不想放弃锁定(显然)

-我宁愿不改变设计,因为这是一个很大的变化

void funcB()

   lock(MA);
   ...
   unlock(MA);


void funcA()

   lock(MA);
   ...
   funcB();
   ...
   unlock(MA);

似乎唯一的方法是 - 使用递归锁。使用此功能有什么缺点吗?

当然,如果你有其他办法解决这个案子,请分享

【问题讨论】:

【参考方案1】:

有什么缺点吗?

轻微的性能损失 - 如果你在乎,请衡量。

其他解决方法

你可以给 funcB 一个 bool should_lock = true 参数,或者主题的许多变体,例如有一个重载锁定互斥锁,然后调用另一个重载,该重载期望引用已锁定的互斥锁(可能使用断言来检查它在调试版本中是否被锁定):然后funcA 可以调用后者。

【讨论】:

以上是关于C++:递归锁——有啥缺点吗?的主要内容,如果未能解决你的问题,请参考以下文章

冗余限定符有啥缺点吗?有啥好处吗?

单例模式有啥缺点吗? [复制]

将按钮放在锚点内有啥缺点吗?

使用数据类型“文本”存储字符串有啥缺点吗?

在 NetBeans 中为 Android 开发有啥缺点吗?

在 URL 中使用双斜杠有啥缺点吗?