C++:递归锁-有缺点吗



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

-我不想创建很多互斥

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

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

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

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

当然,如果你想其他方法来解决这个问题,请分享

有缺点吗?

轻微的性能损失-如果您愿意,可以进行衡量。

解决的任何其他方法

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

最新更新