如何自动检查互斥体是否被锁定?
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
考虑一下:
// 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