Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用boost实现递归锁,它跨越了多个方法?_C++_Boost_Recursive Mutex - Fatal编程技术网

C++ 如何使用boost实现递归锁,它跨越了多个方法?

C++ 如何使用boost实现递归锁,它跨越了多个方法?,c++,boost,recursive-mutex,C++,Boost,Recursive Mutex,我有一个类,它打开事务,向队列添加操作,然后关闭事务。在open->close的整个生命周期中,我希望使用一个递归互斥体,这样在任何时候只有一个线程可以打开一个事务。所有其他线程将被阻止,直到当前事务结束 class MyObject { void beginTransaction() { // acquire mutex } void endTransaction() { // release mutex } boost::recursive_m

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

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

  void endTransaction()
  {
    // release mutex
  }

  boost::recursive_mutex m_mutex;
}
在这种情况下,我很难确定如何使用
递归互斥锁,因为锁的存在时间会超过单个方法的范围。有人能建议我如何在这里应用锁吗?

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

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

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