c - 在用户和内核空间之间配对获取/释放操作
问题描述
我试图确保在用户线程和在 Linux 上以内核模式运行的另一个线程之间共享的一块内存上正确同步。
atomic_store_explicit(memory_order_release)
将来自用户空间的 C11与smp_load_acquire()
来自内核中的 C11 以及分别atomic_load_explicit(memory_order_acquire)
与smp_store_release()
解决方案
是的,当访问内核和用户之间共享的内存(例如 via )时,将 C11 atomic memory_order_release
and memory_order_acquire
in user space 与对应的smp_load_acquire
and in kernel space配对绝对有意义。smp_store_release
mmap()
获取/释放语义在 C11 和 Linux 内核中都提供了类似的保证,如果发现它们在机器指令中的实现不兼容会很奇怪。
虽然 C11 允许“非原子”(太大)类型的原子指令,这可以通过锁来实现,但 Linux 内核禁止使用smp_load_acquire
“smp_load_release
非原子”类型。因此,通过用户空间锁实现 C11 原子是没有风险的,这当然不会影响内核。
推荐阅读
- dialogflow-es - 如何在 DialogFlow 中的短语之间挑选活动
- java - ResourceBundle找不到BaseName gradle项目java
- javascript - 使用 React Suspense 和 React.lazy 子组件进行 Jest/Enzyme 类组件测试
- azure - Azure 是否自行决定取消分配最终用户的 VM?
- r - Editing data frame after reactive upload in R shiny
- xml - Making a XML-built component evoke a non-interface code
- java - 无法获得 go daddy ssl 证书以使用 spring boot
- ios - UISearchBar 清除按钮颜色变化
- spring - Spring Cloud 配置服务 - Git vs Native
- python - 重采样后如何从列中创建新的数据框?