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++:递归锁——有啥缺点吗?的主要内容,如果未能解决你的问题,请参考以下文章