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

17 c c++ multithreading lock-free memory-barriers

在内核端很容易设置内存障碍:由于Linux内核头文件,宏mb,wmb,rmb等总是存在.

如何在用户端完成此操作?

Mar*_*wis 6

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

  • 你没有要求无锁操作; 你问过用户空间的内存障碍.POSIX拥有它们; 它们被称为"pthread_mutex_lock","pthread_mutex_unlock"等.您可能不喜欢它们背后的模型,但*是*是您问题的正式答案. (3认同)

nik*_*nik 5

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

请注意我在这里提到的参考资料的详细说明,

[following] builtins旨在与Intel Itanium处理器特定应用程序二进制接口第7.4节中描述的内容兼容.因此,它们偏离了正常的GCC使用"__builtin_"前缀的做法,而且它们被重载使得它们可以在多种类型上工作.

  • @Michael:posix库不提供mfence/sfence/lfence操作AFAIK.@nik:值得注意的是__sync_synchronize在GCC 4.4之前被破坏了:http://gcc.gnu.org/bugzilla/show_bug.cgi?id = 36793 (3认同)