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 article或this article可能会提供更好的信息
标签:memory-barriers,c,x86,multithreading,intrinsics 来源: https://codeday.me/bug/20190923/1813426.html