【问题标题】:C++ Boost Mutex LockC++ 增强互斥锁
【发布时间】:2017-07-04 18:15:00
【问题描述】:

最近我在玩 Boost mutex,我不确定我是否可以做到以下几点:

boost::recursive_mutex ListLock;

int main(){
  ListLock.lock();
  function1();
  ListLock.unlock();
}

void function1(){
  ListLock.lock();
  //some operations
  ListLock.unlock();
}

可以两次锁定 ListLock 吗?

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。当您尝试编译它时会发生什么;还是稍后运行?你有什么问题?
  • 当然可以,虽然它不会编译。但是,没有任何问题与您递归锁定有关,这就是我感觉您要问的问题。
  • 这就是recursive_mutex 的全部想法。您可以递归锁定它(尽管请考虑使用unique_locklock_guard 以避免手动锁定互斥锁)。
  • 您将收到运行时错误。如果您的程序需要互斥锁重入,您必须使用boost::recursive_mutex。确保你使用 `boost::lock_guard' 它将为你省去很多悲伤。承诺。

标签: c++ boost mutex


【解决方案1】:

这取决于锁。递归锁允许......递归锁。所以,在你的例子中没有问题。

非递归锁(例如 std::mutex 或 boost::mutex)会死锁(从技术上讲,我认为行为是未指定的,但大多数 POSIX 线程实现要么死锁,要么基于 EDEADLK 引发异常)。

请参阅http://en.cppreference.com/w/cpp/thread/recursive_mutex recursive_mutex

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 2012-11-28
    • 2022-07-31
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2015-09-10
    • 2013-06-06
    • 2010-09-16
    相关资源
    最近更新 更多