代码之家  ›  专栏  ›  技术社区  ›  f0b0s

通过组合向类添加锁

  •  1
  • f0b0s  · 技术社区  · 14 年前

    (非递归自旋锁) 所以我有一个想法:我将创建无锁类BarNoLock,线程安全类Bar,它只有一个成员:一个BarNoLock实例。所有的Bar方法只会锁定这个成员并调用它的方法。 这是个好主意还是有更好的模式/实践?谢谢。 更新:我知道pimpl和bridge。我问的是多线程模式,不是OOP。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    8 年前

    我不知道为什么递归互斥会被认为是不好的,请看这个问题来讨论它们。

    Recursive Lock (Mutex) vs Non-Recursive Lock (Mutex)

    但我不认为这一定是你的问题,因为Win32关键部分支持来自同一线程的多个条目而不阻塞。从 doc :

    当线程拥有一个关键部分时,它可以对EnterCriticalSection或TryEnterCriticalSection进行额外调用,而不会阻止其执行。这可以防止线程在等待它已经拥有的关键部分时自行死锁。若要释放其所有权,线程必须在每次进入关键节时调用LeaveCriticalSection一次。对于等待线程获取关键部分所有权的顺序没有任何保证

        2
  •  1
  •   doron    14 年前

    看来你重新发明了 Bridge Pattern