当多个处理器访问相同的数据时,我们可以使用一些原语,如锁定或ATOMIC操作。
如果多个处理器在同一个缓存行中的不同位置写入数据怎么办?我是否需要使用' ATOMIC'在这里防止任何一致性问题的操作?
答案 0 :(得分:1)
没有。这不会导致任何一致性问题。系统会为您处理。它知道何时正确使缓存无效。但请注意,如果发生这种情况,它会创建"错误共享"效果(https://en.wikipedia.org/wiki/False_sharing)。如果经常这样做,这会显着降低性能,因为由于缓存失效,线程正在等待总线太多次。
说明:假设A从高速缓存行读取,然后线程B写入高速缓存行。现在,下次线程A从同一个高速缓存行读取时,CPU知道高速缓存行无效,因此它在线程A可以继续之前再次从RAM读取它。通过这种方式,即使没有竞争条件,由于线程B正在做什么,线程A现在工作得更慢