背景:我有一些线程应该访问共享数据。其中一个线程可能会锁定互斥锁,并且在互斥块内,(同一线程的)某些函数可能会再次调用同一锁定。
-我不想创建多个互斥对象
-我不想放弃锁定(显然)
-我宁愿不更改设计,因为这是一个很大的变化
void funcB()
{
lock(MA);
...
unlock(MA);
}
void funcA()
{
lock(MA);
...
funcB();
...
unlock(MA);
}
看来唯一的方法是-使用递归锁。使用此功能有什么缺点吗?
当然,如果您想通过其他方法解决此问题,请分享
有什么缺点吗?
轻微的性能损失-如果需要,请衡量。
任何其他方式来解决
您可以给出funcB
一个bool should_lock = true
参数,或在主题上进行多种选择,例如,有一个重载锁定了一个互斥锁,然后调用了另一个重载,该重载期望引用已锁定的互斥锁(也许使用一个断言来检查它是否已在调试版本中锁定):funcA
可以叫后者。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句