如何使用boost实现递归锁定,跨越多个方法?

时间:2013-04-30 18:35:12

标签: c++ boost recursive-mutex

我有一个类打开事务,向队列添加操作,然后关闭事务。在open-gt; close生命周期中,我想使用递归互斥锁,这样只有一个线程可以随时打开一个事务。所有其他线程都被阻塞,直到当前事务结束。

class MyObject
{
  void beginTransaction()
  {
    // acquire mutex
  }

  void endTransaction()
  {
    // release mutex
  }

  boost::recursive_mutex m_mutex;
}

在这种情况下,我很难确定如何使用recursive_mutex,因为锁存在的时间比单个方法的范围更长。任何人都可以建议我如何在这里应用锁定?

1 个答案:

答案 0 :(得分:1)

Boost(和标准库)提供互斥锁(可以锁定和解锁)和锁定,它可以锁定构造函数中的互斥锁并在析构函数中解锁它们。锁实际上只是轻量级包装器,用于确保在离开范围时释放锁。

在您的情况下,您只需直接使用互斥锁,而无需将其包装在锁中。

您可以拨打m_mutex.lock()中的beginTransaction来锁定互斥锁,然后m_mutex.unlock()中的endTransaction来解锁互斥锁。如果另一个线程试图在两次调用之间调用m_mutex.lock(),它将一直阻塞,直到endTransaction

中的拥有线程解锁互斥锁