在同一缓存行中的不同位置写入数据时的一致性问题?

Concistency issue when writing data on different location within the same cache-line?

当多个处理器访问相同的数据时,我们可以使用一些原语,如锁或原子操作。

如果多个处理器将数据写入同一缓存行中的不同位置会怎样?我是否需要使用 'ATOMIC' 操作来防止此处出现任何一致性问题?

没有。这不会导致任何一致性问题。系统会为您处理。它知道何时正确地使缓存失效。但请注意,如果发生这种情况,它会产生 "False Sharing" 效果 (https://en.wikipedia.org/wiki/False_sharing)。如果过于频繁,这会显着降低性能,因为由于缓存失效,线程等待总线的次数过多。

解释:假设A从缓存行读取,然后线程B写入缓存行。现在,下次线程 A 从同一缓存行读取时,CPU 知道缓存行无效,因此它会在线程 A 继续之前再次从 RAM 中读取它。这样,即使没有竞争条件,线程 A 现在也因为线程 B 正在做的事情而工作得更慢