atomic_cmpxchg()是否暗示内存壁垒?

 潙沵悈煙卻悈鋽孒沵 发布于 2023-02-06 12:04

以下两个引用似乎矛盾:

https://www.kernel.org/doc/Documentation/atomic_ops.txt

int atomic_cmpxchg(atomic_t * v,int old,int new);

这会对具有给定的旧值和新值的原子值v执行原子比较交换操作。像所有atomic_xxx操作一样,只要通过atomic_xxx操作执行* v的所有其他访问,atomic_cmpxchg将仅满足其原子性语义。

atomic_cmpxchg需要在操作周围使用显式的内存屏障。

https://www.kernel.org/doc/Documentation/memory-barriers.txt

任何修改内存中某些状态并返回状态信息(旧的或新的)的原子操作都意味着在实际操作的每一端都存在一个SMP条件的通用内存屏障(smp_mb())(除了显式锁定操作,已描述)后来)。这些包括:

      <...>   
      atomic_xchg();  
      atomic_cmpxchg();
      <...> 

这些用于实现LOCK类和UNLOCK类操作以及针对对象破坏调整参考计数器的事情,因此隐式内存屏障效应是必需的。

因此,应该atomic_xchg()手动消除内存障碍吗?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有