我有几个关于缓存线的问题。
在相同的缓存行中有两个变量,a和b。
线程1读取a,线程2读取b。
我们知道两个线程都读取整个缓存行(它们都读取a和b)。
但是,线程1修改a,线程2修改b。
如果这样做,是否会导致同一缓存行中的其他变量发生变化?
发布于 2021-09-15 21:19:28
1严格拒绝(变量,但不适用于位字段)。C/C++标准要求实现对相邻内存区域的可靠共享访问;
2a)在强有序系统(x86、SPARC TSO、IBM大型机)上,实现一致性协议类似于互斥,但只禁止同时写入两个CPU,同时允许并发写入和读取(在您的情况下,不同的变量是安全的)。见:https://en.wikipedia.org/wiki/Consistency_model#Relaxed_write_to_read;
2b)在弱排序系统(RISC-V、ARM、SPARC RMO)上,一致性协议的实现更有趣。请参阅:https://en.wikipedia.org/wiki/Consistency_model#Relaxing_read_and_read_to_write_program_orders
https://stackoverflow.com/questions/69193913
复制相似问题