当前位置: 首页 > 知识库问答 >
问题:

“以前强烈发生”是什么意思?

曾嘉荣
2023-03-14

一个评估A强烈地发生在一个评估D之前,如果

(12.1)A在D之前测序,或

(12.2)A与D同步,并且A和D都是顺序一致的原子操作([atomics.order]),或者

(注:这个问题的动机是Peter Cordes在这个答案下的评论。)

附加标准报价草案(感谢Peter Cordes)

顺序与一致性[Atomics.Order]/4

(4.4)如果内存_order::seq_cst栅栏X发生在a之前,B发生在内存_order::seq_cst栅栏Y之前,那么在S中X在Y之前。

共有1个答案

欧阳博超
2023-03-14

为什么会引入“以前发生过强烈事件”?直观上,它与“以前发生过”有什么区别和联系?

为“简单的发生--之前”做好准备!看一下cppref https://en.cppreference.com/w/cpp/atomic/memory_order的当前快照

似乎在C++20中添加了“simply chapple-before”。

2)A与B同步

3)A只是发生在X之前,X只是发生在B之前

注意:没有消费操作,简单地说,发生-之前和发生-之前的关系是相同的。

通过在必要时引入额外的同步(只有在涉及消费操作时才有必要,请参见Batty et al),实现需要确保发生-发生之前关系是非循环的

他们在消费方面有什么不同?参见线程间-HB

线程间发生-之前

...

依赖排序的操作(即使用、释放/消费)是HB,但不一定是简单的-HB。

消费比获取更轻松,所以如果我理解正确的话,HB比简单的-HB更轻松。

无论线程如何,如果以下任一项为真,则计算A将在计算B之前发生:

1)A在B之前被测序

2)A与B同步,A和B都是顺序一致的原子操作

因此释放/消耗操作不能是强HB。

release/acquire可以是HB和simple-hb(因为release/acquire与-synchroned-with同步),但不一定是强-HB。因为强-HB特别指出A必须与B同步,并且是一个顺序一致的操作。

                            Is happens-before guaranteed?

                        HB             Simply-HB          Strongly-HB

relaxed                 no                 no                 no
release/consume        yes                 no                 no      
release/acquire        yes                yes                 no
S.C.                   yes                yes                yes

注释中的“A似乎在所有上下文中都比B先评估”是什么意思?

我不知道为什么强-HB和简单-HB被引入。也许是为了帮助澄清如何围绕消费进行操作?strong-hb有一个很好的属性--如果一个线程在B之前强烈地观察到a,它知道所有线程都将观察到相同的事情。

消费史:

Paul E.McKenney负责消费在C和C++标准中。消费保证指针分配和它所指向的内存之间的顺序。它是因为十二月阿尔法而发明的。DEC Alpha可以推测地取消指针引用,因此它也有一个内存栅栏来防止这种情况。DEC Alpha不再被制造,今天没有处理器有这种行为。消费意在非常放松。

 类似资料:
  • 最有力的色彩组合是充满刺激的快感和支配的 欲念,但总离不开红色;不管颜色是怎么组合,红 色绝对是少不了的。红色是最终力量来源——强烈、大胆、极端。 力量的色彩组合象征人类最激烈的感情:爱、恨、 情、仇,表现情感的充分发泄。 在广告和展示的时候,有力色彩组合是用来传 达活力、醒目等强烈的讯息,并且总能吸引众人的 目光。 补色色彩组合 原色色彩组合 单色色彩组合 55 7 52 4 68 36 4 7

  • 医生说, 例如,应用程序在一个bucket中的每个前缀每秒至少可以实现3500个PUT/COPY/POST/DELETE和5500个GET/HEAD请求。一个bucket中前缀的数量没有限制。您可以通过并行化读取来提高读写性能。例如,如果在Amazon S3存储桶中创建10个前缀来并行读取,则可以将读取性能扩展到每秒55000个读取请求。 但是,它没有明确提到前缀的概念。 例如, 假设我有3个文件

  • 举例来说,react或vue项目里。CSS用到url的时候,~和@是什么用法。在哪里配置的,MDN里好像也没写这个。求一个完整的步骤

  • 问题内容: 在java int,float等中,是原始类型。如果我们需要将其与泛型一起使用,则使用包装器类。但是,以下声明在Java中仍然有效, 即使它是原始类型,如何调用? 问题答案: 原始对象成为对象 对于基元,在相应的包装器类中有一些名为TYPE的常量的Class对象可用-即,int.class更改为java.lang.Integer.TYPE。对于其他类型,编译器在正在编译的类中创建一个私

  • 问题内容: 我目前正在(恢复)使用EJB的速度,而当我离开时,它发生了巨大的变化(到目前为止更好)。但是,我遇到了一个我正在苦苦挣扎的概念,并且想更好地理解它,因为它似乎在我们的代码中使用了(我工作的地方,而不是我和我所有的声音)。 这是我在一本书中找到的示例。这是显示如何使用注释的示例的一部分: 的类是一个相当简单的类来定义对:和。 哦,我从Rubinger&Burke的O’Reilly的Ent

  • 问题内容: 什么是POSIX?我已阅读Wikipedia文章,并且每次遇到该术语时都会阅读。事实是我从来没有真正了解过它是什么。 有人可以通过解释“ POSIX的需求”来向我解释吗? 问题答案: POSIX是IEEE指定的一系列标准,用于阐明和统一Unix- y操作系统提供的应用程序编程接口(以及附属问题,例如命令行外壳实用程序)。当您编写依赖于POSIX标准的程序时,可以肯定地将它们轻松移植到大