std :: notify_one()中的“单个总订单”是什么意思?

时间:2018-11-13 17:03:21

标签: c++

我已经读过Concurrency: Atomic and volatile in C++11 memory modelHow 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()的一部分(解锁+等待,唤醒和   锁定)以单个总订单发生,可以将其视为   原子变量的修改顺序:该顺序特定于   这个个别的condition_variable。这使得不可能   notify_one()例如会被延迟并取消阻止   刚打完notify_one(),就开始等待。

说“以单个总订单发生”是什么意思?这与下一个句子“这使得.....被制造成不可能”有什么关系? (看来这是在说因果)。

我一遍又一遍地逐字阅读,不明白它在说什么。.维基百科中“总订单”的定义无济于事。

1 个答案:

答案 0 :(得分:0)

  

说“以单个总顺序发生”是什么意思?

这意味着每个线程看到的操作序列相同。例如,使用多个非原子变量,线程C可以看到由线程A引起的int a的更改,然后才能看到由线程B引起的int b的更改,而线程D看到了B的变化在A之前。存在多个时间不兼容的事件,这些事件的发生时间比其他事件早,每个线程可能彼此不同。没有同步机制(例如std::condition_variable),就不可能防止不必要的系统行为。

总顺序意味着可以将每个元素与其他每个元素进行比较(对比部分元素的顺序是部分元素无法比拟的部分顺序)。在这种情况下,存在事件的时间表。这是,所有线程对此都表示同意。

  

这与下一个句子“这之间的关系如何,例如,这使得notify_one()不可能被延迟并取消阻塞刚调用notify_one()之后才开始等待的线程”。 ?

因为所有线程都同意事情发生的顺序,所以您无法在任何地方观察到其原因之前的影响。