另一周,我写了一个小线程类和一个单向消息管道来允许线程之间的通信(显然,每个线程有两个管道,用于双向通信)。在我的 Athlon 64 X2 上一切正常,但我想知道如果两个线程都在查看同一个变量并且每个内核上该变量的本地缓存值不同步,我是否会遇到任何问题。
我知道volatile关键字会强制变量从内存中刷新,但是多核 x86 处理器有没有办法强制所有内核的缓存同步?这是我需要担心的事情吗,或者轻量级锁定机制的volatile和正确使用(我使用 _InterlockedExchange 设置我的 volatile 管道变量)会处理我想为多核 x86 CPU 编写“无锁”代码的所有情况?
我已经知道并使用了关键部分、互斥体、事件等。我主要想知道是否有 x86 内在函数我不知道哪种力或可用于强制缓存一致性。