std::unique_lock<L>具有
owns_lock成员函数(相当于
is_locked您所说的)。
std::mutex gmtx;std::unique_lock<std::mutex> glock(gmtx, std::defer_lock);void alpha(void) { std::lock_guard<decltype(glock)> g(glock); beta(void); // some other work}void beta(void) { assert(glock.owns_lock()); // or just assert(glock); // some real work}编辑: 在此解决方案中,所有锁定操作应通过unique_lock
glock而不是“原始”互斥锁执行
gmtx。例如,
alpha用
lock_guard<unique_lock<mutex>>(或简单地
lock_guard<decltype(glock)>)重写成员函数。



