我指的是C++11内存模型的正式定义(Mark等),它包括原子、锁、放松内存模型,但没有对条件变量的行为进行正式定义。类似地,在Java内存模型中,等待()和通知()机制也没有定义。为什么会这样呢?
发布于 2017-04-11 11:27:25
类似地,在Java内存模型中,等待()和通知()机制也没有定义。为什么会这样呢?
因为它是一个记忆模型。它建模/指定多线程应用程序中内存读取和内存写入操作的行为。
wait()和notify()的行为方面(从某种意义上说)是从内存模型中涌现出来的。对wait()和notify()的调用必须使用原始互斥。这意味着锁定和解锁操作发生在特定的点,并且(在wait()的情况下)它们被指定为在某些情况下执行解锁和锁定操作。这些操作在内存模型中建模..。这使得条件变量的紧急语义听起来不错,前提是您坚持使用推荐的模式来实现它们。
wait()和notify()的其他方面在JLS中指定。它与内存模型在同一章中。但是另一个部分。17.2而不是17.4。其余的行为是在javadoc中定义的。
发布于 2019-12-12 12:17:57
您似乎关心的是C++“模型”的一个细节,它甚至不包括未定义的行为、破坏原子的能力等等。这个模型从根本上讲是不健全的,没有意义,那么你为什么还要费心呢?
https://stackoverflow.com/questions/43343554
复制相似问题