【发布时间】:2018-11-13 17:03:20
【问题描述】:
我已经阅读了Concurrency: Atomic and volatile in C++11 memory model 和How std::memory_order_seq_cst works,它没有多大帮助,直接回答我的问题。
来自https://en.cppreference.com/w/cpp/thread/condition_variable/notify_one:
notify_one()/notify_all()和三个原子中的每一个的效果wait()/wait_for()/wait_until()的一部分(解锁+等待、唤醒和 lock) 以单一的总顺序发生,可以被视为 原子变量的修改顺序:顺序特定于 这个单独的condition_variable。这使得不可能notify_one()例如,延迟并解除阻塞一个线程 在拨打notify_one()之后就开始等待。
说“以单一的总顺序发生”是什么意思?这与下一句“这使得它不可能......被制造。”有什么关系? (好像在说因果)。
我逐字阅读了 10 多次,但不明白它在说什么。维基百科对“全序”的定义无济于事。
【问题讨论】:
-
我把最后一句话读成:如果一个线程调用
notify_one(),那么被唤醒的线程在notify_one()被调用之前就开始等待了。 (不可能认为一个线程在之后开始等待。)此时,授予了一定的确定性,通常不在线程之间(没有任何类型的锁定/同步)。 -
为什么这个重复..?我看了一眼这两个问题,并没有找到直接的答案。
标签: c++