我有一个Linux内核模块,用于计算多个CPU(内核地址空间)之间的网络数据包统计信息。我会定期清除相应的内存块,并强烈需要此操作立即生效所有CPU,否则会使后续统计值失真。我的目标CPU是Power PC,因此它的缓存一致性非常宽松。因此,我需要在将内存归零后手动刷新所有CPU的数据缓存。
那么我应该在清算程序之后放置什么:
memset(ptr, 0, size);
// what's going here?
答案 0 :(得分:0)
经过一番反思后,我意识到这里的问题并没有真正与数据缓存刷新有关。实际上我试图避免平庸的竞争条件(第一个cpu清除值,而第二个cpu增加它)。在我看来,通过互斥锁保护数据的成本太高,因此值得使用原子标志来通知拥有的CPU自己清除值。