我需要在同一 CPU 上运行的多个线程的上下文中使用 CAS 函数(假设所有线程都静态地粘合到选定的 CPU,通过SetThreadAffinityMask
)。
InterlockedCompareExchange
生成LOCK CMPXCHG。LOCK 部分会带来一些副作用,例如缓存未命中、总线锁定以及与其他 CPU 争用的可能性,所有这些都很好,但考虑到这种情况,感觉就像是一种奢侈的过度。由于竞争线程在同一个 CPU 上运行,我假设可以删除 LOCK,并且我进一步假设它应该会提高性能。
所以这是我的第一个问题——我假设正确吗?
--
我知道如何使用 32 位版本的内联汇编生成 CMPXCHG。此外,根据这个 SO 线程,我也知道如何处理 64 位版本,但作为函数调用。
我不明白,这是我的第二个问题,是如何生成它的内联版本。
--
谢谢。