为什么 C++/Java 内存模型不包含条件变量

Why doesn't the C++/Java memory model include condition variables

我指的是 C++11 内存模型的正式定义(Mark Ba​​tty 等人),其中包括原子、锁、宽松的内存模型,但没有关于条件变量行为的正式定义。同样在 Java 内存模型中,也没有定义 wait() 和 notify() 机制。这是为什么?

Similarly in Java Memory Model, there also is no definition on the wait() and notify() mechanisms. Why is that?

因为是内存模型。它建模/指定多线程应用程序中内存读取和内存写入操作的行为。

wait()notify() 的行为方面(在某种意义上)emergent 来自内存模型。对 wait()notify() 的调用必须使用原始互斥体。这意味着 lockunlock 操作发生在特定点,并且(在 wait() 的情况下)它们被指定为执行 unlocklock 在某些情况下的操作。这些操作是在内存模型中建模的……这使得条件变量的紧急语义听起来很合理,前提是您坚持推荐的实现它们的模式。

wait()notify() 的其他方面在 JLS 中指定。它与内存模型在同一章中。但是不同的部分。 17.2 而不是 17.4。其余行为在 javadoc 中定义。

您似乎关心 C++ 的一个细节 "model",它甚至不包括未定义的行为、破坏原子的能力等。该模型从根本上来说是不健全且毫无意义的,所以您为什么还要麻烦吗?