首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么C++/Java内存模型不包括条件变量

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

Stack Overflow用户
提问于 2017-04-11 10:35:56
回答 2查看 218关注 0票数 2

我指的是C++11内存模型的正式定义(Mark等),它包括原子、锁、放松内存模型,但没有对条件变量的行为进行正式定义。类似地,在Java内存模型中,等待()和通知()机制也没有定义。为什么会这样呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-11 11:27:25

类似地,在Java内存模型中,等待()和通知()机制也没有定义。为什么会这样呢?

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2019-12-12 12:17:57

您似乎关心的是C++“模型”的一个细节,它甚至不包括未定义的行为、破坏原子的能力等等。这个模型从根本上讲是不健全的,没有意义,那么你为什么还要费心呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43343554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档