【发布时间】:2015-05-03 17:55:28
【问题描述】:
有没有办法判断 C++11 中的当前线程是否持有互斥锁?特别是我想确保类中的某些函数只在调用线程持有对象的锁(通过std::lock_guard、std::unique_lock或类似的东西)时被调用,std::mutex是一个成员变量.
为避免在对象被广泛使用时重复锁定和解锁,锁定mutex的责任需要由调用者负责,并且不能在每个单独的函数中,如果当前线程没有在调用任何这些函数时锁定mutex,我想抛出异常。
似乎我不能只使用std::try_lock,然后根据需要进行解锁,因为如果当前线程已经持有锁,std::try_lock 的行为是未定义的。
【问题讨论】:
-
“我似乎不能只使用
std::try_lock,然后根据需要使用unlock,因为如果当前线程已经持有锁,std::try_lock的行为是未定义的。 " - 如果您切换到recursive_mutex,则不会。如果您使用 pthreads,PTHREAD_MUTEX_ERRORCHECK是另一种选择 - 如果您没有收到错误,throw。
标签: c++ multithreading c++11 locking mutex