其他分享
首页 > 其他分享> > c – 我什么时候应该使用_mm_sfence _mm_lfence和_mm_mfence

c – 我什么时候应该使用_mm_sfence _mm_lfence和_mm_mfence

作者:互联网

我阅读了“英特尔架构的英特尔优化指南指南”.

但是,我仍然不知道我应该何时使用

_mm_sfence()
_mm_lfence()
_mm_mfence()

任何人都可以解释在编写多线程代码时何时应该使用它们?

解决方法:

警告:我不是这方面的专家.我还在努力学习这个.但由于过去两天没有人回复,看来记忆围栏指示专家似乎并不多.所以这是我的理解……

英特尔是一个weakly-ordered内存系统.这意味着您的程序可能会执行

array[idx+1] = something
idx++

但是在更改数组之前,对idx的更改可能是全局可见的(例如,对在其他处理器上运行的线程/进程).在两个语句之间放置sfence将确保写入发送到FSB的顺序.

同时,另一个处理器运行

newestthing = array[idx]

可能已缓存数组的内存并具有过时副本,但由于高速缓存未命中而获取更新的idx.
解决方案是事先使用lfence以确保负载同步.

This articlethis article可能会提供更好的信息

标签:memory-barriers,c,x86,multithreading,intrinsics
来源: https://codeday.me/bug/20190923/1813426.html