c++ - 为什么在 ISO/IEC 14882 :2011? 中定义了一个独特的 "inter-thread happens before"关系

标签 c++ multithreading c++11 memory-model

ISO/IEC 14882:2011 (C++ 11) 的 § 1.10.11 定义了求值之间的“线程间发生之前”关系,其与 § 1.10.12 中“发生之前”关系的唯一区别是 A 发生在 B 之前,如果 A 排在 B 之前,但这对于 A 线程间发生在 B 之前是不够的。为什么“线程间发生在之前”足够重要以保证单独定义?

§ 1.10.11 中的注释表明“线程间发生在之前”不允许评估其唯一关系在部分“之前排序”

to permit “inter-thread happens before” to be transitively closed

这是什么意思?我知道什么是传递闭包,我知道集合在某些操作中关闭意味着什么,但我从未听说过“传递关闭”,Google 和上下文都让我失望。

最佳答案

“Inter-thread happens before”纯粹是为了说明而定义的。请注意“发生在之前”是如何定义为“顺序发生在之前或线程间发生在之前”,并且“线程间发生在之前”的概念不用于其他任何事情。 “Sequenced before”描述发生在同一个线程上的求值,“inter-thread happens before”适用于发生在不同线程上的求值; “发生在之前”结合了两者。

关于c++ - 为什么在 ISO/IEC 14882 :2011? 中定义了一个独特的 "inter-thread happens before"关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17768718/

相关文章:

C++ 继承问题,无法调用基类中定义的公共(public)函数

c++ - cpp的一些基本问题

等待超时后使用 Task.Wait 记录 C#/Tasks 错误两次

c++ - 如何获取指向 std::get<0,tuple<int,int>> 的指针?

c++11 - 带有自定义分配器的 std::promise 似乎使用 global new

c++ - 通过模板特化的依赖注入(inject)

c++ - 数组中的魔数(Magic Number)? - C++

java - 如何确定由 Executor.execute() (不是 ExecutorService )启动的线程/任务是否完成?

multithreading - 我的MessageWebSocket.OutputStream放置在哪里?

c++11 - 是否有特定时间使用 c++11 而不是 c++17