在用户空间记忆障碍是什么? (Linux操作系统,X86-64)(Memory barriers

2019-07-30 20:41发布

这是很容易设置的内核侧记忆障碍:宏MB,WMB,人民币等,总是在感谢的Linux内核头文件的地方。

如何做到这一点在用户端?

Answer 1:

POSIX 定义了许多功能作为充当存储器障碍。 内存位置不能同时访问; 为防止这种情况,使用同步 - 这也同步将作为屏障。



Answer 2:

您正在寻找完整的内存屏障的gcc的原子内建命令。

请注意,我给说这里参考的细节,

的[以下]建宏旨在是与那些在英特尔安腾针对处理器的应用程序二进制接口描述兼容,第7.4节。 因此,他们使用了“__builtin_”前缀的正常GCC实践出发,进一步它们重载,因此它们对多种类型的工作。



Answer 3:

使用libatomic_ops。 http://www.hpl.hp.com/research/linux/atomic_ops/

这不是编译器特定的,而且比GCC的东西少马车。 这不是一个giganto库,它提供吨你不关心的功能。 它只是提供原子操作。 此外,它移植到不同的CPU架构。



Answer 4:

Linux的x64的意味着你可以使用Intel内存屏障指令。 你可能会包起来类似于那些在Linux头宏,如果这些宏是不恰当或访问代码



Answer 5:

__sync_synchronize()中GCC 4.4+

英特尔存储器排序白皮书,从英特尔64的卷3A和IA-32手册的部分http://developer.intel.com/Assets/PDF/manual/253668.pdf



Answer 6:

所述Qprof仿形库(无关的Qt)在其源代码还包括原子操作,包括存储器屏障的文库。 它们在很多编译器和架构工作。 我使用它在我的一个项目。

http://www.hpl.hp.com/research/linux/qprof/download.php4



Answer 7:

只要借款Linux内核定义的障碍,只要这些宏添加到您的头文件: http://lxr.linux.no/#linux+v3.6.5/arch/x86/include/asm/barrier.h#L21 。 当然还有,给Linux开发人员的信用在你的源代码。



Answer 8:

include/arch/qatomic_*.h最近的Qt分布头包括了很多架构(LGPL)代码和各种内存屏障(获取,发布,两者)。



文章来源: Memory barriers in userspace? (Linux, x86-64)