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_lockglock
而不是“原始”互斥锁执行gmtx
。例如,alpha
用lock_guard<unique_lock<mutex>>
(或简单地lock_guard<decltype(glock)>
)重写成员函数。