关于cc-NUMA体系结构和刷新变量的需要,我错过了一些东西。我们都知道,如果两个线程修改同一个缓存线,那么"错误共享"条件将出现,迫使缓存线再次重新加载。那么,为什么我们需要刷新变量来进行线程交换信息呢?假设在序列区域中声明:
int flag=0;
然后在并行区域线程0分配共享变量:
flag=1;
将线程1:
while (!flag){}
循环是否在没有冲洗的情况下终止?如果不是,为什么我们在cc-NUMA架构中?
别忘了,编译器也可以执行导致上述代码中断的优化,而不仅仅是CPU。
因此,我认为刷新仍然是必要的,不管硬件支持缓存一致性。