配对用户和内核之间的获取/释放操作space

Pairing acquire / release operations between user and kernel space

我正在尝试确保在 Linux.

上的内核模式下,在用户线程和另一个线程 运行 之间共享的一段内存上进行正确同步

将用户 space 的 C11 atomic_store_explicit(memory_order_release) 与内核中的 smp_load_acquire() 以及 atomic_load_explicit(memory_order_acquire) 与 [=14= 配对是否有意义]?

是的,将用户 space 中的 C11 原子 memory_order_releasememory_order_acquire 与内核中对应的 smp_load_acquiresmp_store_release 配对绝对有意义space 当访问内核和用户共享的内存时(例如通过 mmap())。

Acquire/release 语义在 C11 和 Linux 内核中提供了类似的保证,如果在机器指令 不兼容 中发现它们的实现会很奇怪。

虽然 C11 允许 "non-atomic"(太大)类型的原子指令,这可以通过锁实现,但 Linux 内核禁止使用 smp_load_acquiresmp_load_release对于 "non-atomic" 类型。因此,通过 user-space 锁实现 C11 原子是没有风险的,当然,这不会影响内核。