C ++:递归锁-有什么缺点吗?

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

-我不想创建许多互斥体

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

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

void funcB()
{
   lock(MA);
   ...
   unlock(MA);
}

void funcA()
{
   lock(MA);
   ...
   funcB();
   ...
   unlock(MA);
}

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

当然,如果您想通过其他方法解决此问题,请分享

iCMS 回答:C ++:递归锁-有什么缺点吗?

有什么缺点吗?

轻微的性能损失-衡量您是否在意。

任何其他解决方法

您可以为funcB提供一个bool should_lock = true的论点,或在主题上进行多种选择,例如有一个重载锁定了一个互斥锁,然后调用了另一个重载,该重载期望引用一个已经锁定的互斥锁(也许使用一个断言来检查它在调试版本中是否被锁定):然后funcA可以调用后者。

本文链接:https://www.f2er.com/1856236.html

大家都在问