c++ - 什么是线程间操作

标签 c++ multithreading sequential

我一直在读一本关于 C++ 多线程的书,我对术语“线程间”的实际含义感到非常困惑。起初我以为它是用来描述线程之间的通信的。但随着这本书越来越深入,它开始更加宽松地使用这个术语,以至于我不再理解它的含义了。例如,以这个短段落为例

“线程间发生之前也与顺序之前关系相结合:如果操作 A 在操作 B 之前排序,并且操作 B 线程间发生在操作 C 之前,则 A 线程间发生在 C 之前。类似地,如果 A 与 B 同步,并且 B 排在 C 之前,则 A 线程间发生在 C 之前。这两者一起意味着,如果您在单个线程中对数据进行一系列更改,则只需要一个同步 -数据对执行 C 的线程上的后续操作可见的关系。” 空

读完那段话后,我正式迷失了。这本书非常擅长解释新术语,却完全忘记了这一点。这让我觉得这是一个不需要解释的常用术语,这使得提出这个问题变得更加困难。那么有人可以花时间解释这个术语的实际含义吗?

最佳答案

在此上下文中,术语线程间并不局限于线程之间通信的特定 channel 或方法,而是发生在的概念。 p>

让我们以您引用的段落为例:

if operation A is sequenced before operation B, and operation B inter-thread happens-before operation C, then A inter-thread happens-before C

在下面的代码中

thread1
--------------
0x10: int a = 1;
0x11: sendResultToThread(a);


thread2
--------------
0x12: int c = getResultFromOtherThread();

在没有数据竞争的情况下进行简化,并假设此处涉及的指令具有原子性,该句子表示,如果操作 0x10 在 0x11 之前排序(并且在同一个线程中,因为它在源代码中位于前面)并且操作 0x11 < em>happens-before 在多线程上下文中(即,存在某种机制,在执行 0x12 之前,0x11 产生的内存效应对 0x12 是可见的,并且除其他外,还确保 0x11 将当多个线程交互时,总是在 0x12 之前临时执行),然后 0x10 线程间发生在 C 之前。

对于第二句也可以得出类似的结论。

所以回答你的问题:线程间操作(不要与线程内混淆,即在同一线程中)指的是交互和同步(线程之间(显式或隐式)。不要将其视为共享内存区域等,因为它可能会妨碍您对所解释的概念的推理。

关于c++ - 什么是线程间操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34116566/

相关文章:

performance - 并行版本比golang中的串行版本慢得多

Python - 带有数据框的顺序循环

java - 如何使用 Java 通过 Selenium RC 和 TestNG 顺序运行/执行方法

C++ 字符串溢出

c# - 为什么这个 ThreadPool.QueueUserWorkItem 代码没有让我的测试失败?

c - 在 C 中没有锁的线程之间共享 bool 值

c++ - 如何在 C++ 程序中间注销昂贵的文件 I/O

c++ - 从裸数据到 C++ 包装器的类型转换

java - 在 C++ 中访问 Java byte[]

c++ - 使用 gtest 为动态库编写单元测试