【问题标题】: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);
}

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

当然,如果你有其他办法解决这个案子,请分享

【问题讨论】:

    标签: c++ locking mutex


    【解决方案1】:

    有什么缺点吗?

    轻微的性能损失 - 如果你在乎,请衡量。

    其他解决方法

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

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 2011-07-12
      • 1970-01-01
      • 2011-04-26
      • 2011-02-28
      • 2011-01-19
      • 2011-11-05
      • 2015-01-01
      • 2017-04-03
      相关资源
      最近更新 更多