背景:我有几个线程应该访问共享数据。其中一个线程可能会锁定Mutex,在互斥块中,(同一线程的(一些函数可能会再次调用同一个锁。
-我不想创建很多互斥
-我不想放弃锁定(显然(
-我宁愿不改变设计,因为这是一个相当大的改变
void funcB()
{
lock(MA);
...
unlock(MA);
}
void funcA()
{
lock(MA);
...
funcB();
...
unlock(MA);
}
似乎唯一的方法就是使用递归锁。使用这个功能有什么缺点吗?
当然,如果你想其他方法来解决这个问题,请分享
有缺点吗?
轻微的性能损失-如果您愿意,可以进行衡量。
解决的任何其他方法
您可以给funcB
一个bool should_lock = true
参数,或者主题的许多变体,例如,有一个重载锁定互斥体,然后调用另一个重载,该重载期望引用已经锁定的互斥体(也许可以使用断言来检查它在调试构建中是否锁定(:然后funcA
可以调用后者。