用户空间的内存障碍? (Linux、x86-64)

发布于 2024-07-29 07:23:14 字数 82 浏览 6 评论 0原文

在内核端设置内存屏障很容易:由于 Linux 内核头文件,宏 mb、wmb、rmb 等始终处于适当位置。

在用户端如何实现这一点?

It is easy to set memory barriers on the kernel side: the macros mb, wmb, rmb, etc. are always in place thanks to the Linux kernel headers.

How to accomplish this on the user side?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

神经大条 2024-08-05 07:23:14

您正在寻找 gcc 的完整内存屏障原子内置函数。

请注意我在这里给出的参考资料的详细信息,

[以下]内置函数旨在与英特尔安腾处理器特定应用程序二进制接口第 7.4 节中描述的内置函数兼容。 因此,它们偏离了使用“__builtin_”前缀的正常 GCC 实践,并且它们被重载,从而可以处理多种类型。

You are looking for the full memory barrier atomic builtins of gcc.

Please note the detail on the reference i gave here says,

The [following] builtins are intended to be compatible with those described in the Intel Itanium Processor-specific Application Binary Interface, section 7.4. As such, they depart from the normal GCC practice of using the “__builtin_” prefix, and further that they are overloaded such that they work on multiple types.

您的好友蓝忘机已上羡 2024-08-05 07:23:14

Posix 定义了许多函数作为内存屏障。 内存位置不得同时访问; 为了防止这种情况,请使用同步 - 并且同步也会充当障碍。

Posix defines a number of functions as acting as memory barriers. Memory locations must not be concurrently accessed; to prevent this, use synchronization - and that synchronization will also work as a barrier.

萌面超妹 2024-08-05 07:23:14

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

它不是特定于编译器的,并且比 GCC 的 bug 更少。 它不是一个提供大量您不关心的功能的巨型库。 它只提供原子操作。 此外,它还可以移植到不同的 CPU 架构。

Use libatomic_ops. http://www.hpl.hp.com/research/linux/atomic_ops/

It's not compiler-specific, and less buggy than the GCC stuff. It's not a giganto-library that provides tons of functionality you don't care about. It just provides atomic operations. Also, it's portable to different CPU architectures.

萌面超妹 2024-08-05 07:23:14

Linux x64 意味着您可以使用 Intel 内存屏障指令。
您可以将它们包装在类似于 Linux 头文件中的宏中,如果
这些宏不适合您的代码或您的代码无法访问

Linux x64 means you can use the Intel memory barrier instructions.
You might wrap them in macros similar to those in the Linux headers, if
those macros aren't appropriate or accessible to your code

汐鸠 2024-08-05 07:23:14

GCC 4.4+ 中的 __sync_synchronize()

英特尔内存订购白皮书,英特尔 64 和 IA-32 手册第 3A 卷的一部分 http://developer.intel.com/Assets/PDF/manual/253668.pdf

__sync_synchronize() in GCC 4.4+

The Intel Memory Ordering White Paper, a section from Volume 3A of Intel 64 and IA-32 manual http://developer.intel.com/Assets/PDF/manual/253668.pdf

忆伤 2024-08-05 07:23:14

Qprof 分析库(与 Qt 无关)还在其源代码中包含一个原子操作库,包括内存屏障。 它们适用于许多编译器和架构。 我正在我的一个项目中使用它。

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

The Qprof profiling library (nothing to do with Qt) also includes in its source code a library of atomic operations, including memory barriers. They work on many compilers and architectures. I'm using it on a project of mine.

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

久光 2024-08-05 07:23:14

最近的 Qt 发行版的 include/arch/qatomic_*.h 标头包含许多架构和各种内存屏障(获取、释放,两者)的 (LGPL) 代码。

The include/arch/qatomic_*.h headers of a recent Qt distribution include (LGPL) code for a lot of architectures and all kinds of memory barriers (acquire, release, both).

北座城市 2024-08-05 07:23:14

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

Simply borrowing barriers defined for Linux kernel, just add those macros to your header file: http://lxr.linux.no/#linux+v3.6.5/arch/x86/include/asm/barrier.h#L21 . And of course, give Linux developers credit in your source code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文