如何使用boost实现一个跨越多个方法的递归锁

How can implement a recursive lock using boost, that spans multiple methods?

本文关键字:跨越 方法 递归 一个 boost 何使用 实现      更新时间:2023-10-16

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

class MyObject
{
  void beginTransaction()
  {
    // acquire mutex
  }
  void endTransaction()
  {
    // release mutex
  }
  boost::recursive_mutex m_mutex;
}

在这种情况下,我很难确定如何使用recursive_mutex,因为锁的存在时间比单个方法的作用域长。有人能告诉我如何在这里应用锁吗?

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

在您的例子中,您可以直接使用互斥锁,而不必将其封装在锁中。

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