multithreading - 当线程只写入同一个缓存 block 时,是否也会发生错误共享?

标签 multithreading parallel-processing multiprocessing false-sharing

如果我们有两个内核在同一个缓存块中读取和写入不同的内存位置,则两个内核都被迫一次又一次地重新加载该缓存块,尽管这在逻辑上是不必要的。这就是我们所说的虚假分享。

但是,如果内核从不从该缓存块读取,而只写入怎么办?想象一下,两个内核只是在同一个缓存块中设置了一些位,但它们不必从块中读取,因为它们设置的位信息仅在程序的后期阶段才需要。

是否仅当内核在同一个块上读写时才会发生错误共享,或者如果两者都只写入它也会发生?

最佳答案

是的,它也会发生。为了写入缓存行中的字节子集,必须首先读取该行,然后修改,然后写回。逻辑写入通常是物理读写。

CPU 可以以不同的方式执行此操作,但我不知道有任何 CPU 执行此操作。

关于multithreading - 当线程只写入同一个缓存 block 时,是否也会发生错误共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28199412/

相关文章:

node.js - 仅使用一个回调并行运行异步

java - 线程没有控制台输出。线程不起作用?

C# 线程终止和 Thread.Abort()

c++ - 并行 for 比顺序 for 慢

python 多进程未正确完成

python - 如何使用 multiprocessing.Manager()?

mysql - 使用python中的线程在Mysql上同时运行多个查询

java - 并行流中的流操作等到前一个流操作处理完所有元素

r - R中数据帧的并行处理

python - 使用多线程使用python3处理文件