Boost :: mutex - 是否可以将其锁定在一个类函数中并在另一个类函数中解锁?

时间:2011-08-19 07:48:06

标签: c++ multithreading boost mutex boost-thread

所以我们的课程有ab。线程one调用a,其他任何线程都无法调用ab,直到one会调用b。含义线程one能够调用a而不是a和...而不是a,而one没有调用b其他想要调用ab的线程等待。是否可以使用boost::mutex进行此类操作以及如何进行此操作?

4 个答案:

答案 0 :(得分:6)

互斥锁不是问题;这是锁。最简单的解决方案是 只需手动拨打mutex::lock()mutex::unlock(),然后忘了 关于mutex::scoped_lock;毕竟,你不想要锁定 尊重范围。问题是通常的问题;你可能 想要在异常的情况下释放锁。一种解决方案是 动态分配mutex::scoped_lock,并使用std::auto_ptrboost::shared_ptr来管理它。 (奇怪的是,两者都没有 boost::mutex::scoped_lockstd::lock_guard是可移动的,所以你 需要动态分配才能转让所有权。)

答案 1 :(得分:3)

它具有单独的lock()unlock()功能。让互斥体成为你的类的成员,然后调用这些相应的函数......我会找到另一种方法 - 你可能有各种奇怪的情况(比如线程调用a崩溃?)

答案 2 :(得分:2)

有几种方法可以做到这一点。您可以将互斥锁作为基类的属性,然后从中继承工作对象。或者将互斥锁的引用发送给每个工人类。

答案 3 :(得分:1)

有可能。只需从boost::mutex::lock()拨打a,从boost::mutex::unlock()拨打b

但请注意,如果在互斥锁被锁定时抛出异常,则应确保最终调用unlockscoped_lock会自动执行此操作,但您必须手动执行此操作。