如何原子性地检查互斥锁是否被锁定



考虑一下:

// 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处检查锁是否被锁定不同步。这里明确地告知CCD_ 5";原子解锁">,但这里没有告诉owns_lock是原子的或与锁操作同步。

所以问题是:我如何原子地检查wait是否原子地解锁了锁?

编辑:

希望在Thread02处知道Thread01是否在等待该条件。这就是为什么我接受了这个答案。

您可以立即锁定并获得所需的Thread02:

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

相关内容

  • 没有找到相关文章

最新更新