如何自动检查互斥体是否被锁定?

How to atomically check if mutex is locked?

考虑一下:

// Somewhere
std::mutex mutex;
std::unique_lock lock{mutex};
std::condition_variable condition;

// Thread01
condition.wait(lock);

// Thread02
while (lock.owns_lock());

所以我遇到了这样的情况,在 Thread02 处的循环永远不会结束,尽管 Thread01 正在等待条件。

这意味着在 std::condition_variable::wait 解锁锁与检查锁是否在 std::unique_lock::owns_lock 锁不同步。 Here it is explicitly told that the wait "Atomically unlocks lock..." but here 没有任何关于 owns_lock 原子化或与锁操作同步的信息。

所以问题是:我如何自动检查 wait 自动解锁锁

编辑:

希望知道 Thread02 是否 Thread01 正在等待条件。这就是我接受答案的原因。

您可以暂时锁定锁并获得所需的Thread02:

// Thread02
std::unique_lock{mutex};
// mutex isn’t locked