做网站注册35类还是42,公司核名在哪个网站,建设信用卡中心网站首页,下载安装百度-------------------------------------------------------------上一章节说的原子操作#xff0c;有同学在下面留言说#xff0c;原子操作不是万能的吧#xff1f;确实是#xff0c;原子操作不是万能的#xff0c;体系结构在完成原子操作部分也是花费了很大的心思#x… -------------------------------------------------------------上一章节说的原子操作有同学在下面留言说原子操作不是万能的吧确实是原子操作不是万能的体系结构在完成原子操作部分也是花费了很大的心思不同下CPU 应该有自己的实现方式。CPU 在进行原子操作的时候其他代码是不能执行的比如教室里面只有一个游戏机A 同学在游戏机上玩的时候其他人是不能再去占领他的东西的所以在编写原子操作相关的代码的实话只能在那些特别重要的整型变量上去使用不可能让一个函数去实现原子操作这样系统调度就出现问题了。原子操作代码位置./include/asm-generic/atomic.h原子操作初始化#define ATOMIC_INIT(i) { (i) }原子数据类型我们看Linux 内核代码发现内核把原子当作成一个数据类型来声明如果你这个变量是原子类型的以后的操作就应该使用原子操作来使用它。typedef struct { int counter;} atomic_t;#ifdef CONFIG_64BITtypedef struct { long counter;} atomic64_t;#endif原子操作自增static inline void atomic_add(int i, atomic_t *v){ atomic_add_return(i, v);}再调用#ifndef atomic_add_returnstatic inline int atomic_add_return(int i, atomic_t *v){ unsigned long flags; int temp; raw_local_irq_save(flags); /* Dont trace it in an irqsoff handler */ temp v-counter; temp i; v-counter temp; raw_local_irq_restore(flags); return temp;}#endif其中的原理就是锁住中断等操作完成后再释放中断比如这里有一个门门后面的操作就是更换衣服正常情况下所有人都可以进去里面更换衣服但是呢有一个明星过来了它就是原子原子跟老板CPU说我换衣服的时候其他人都不能进来哈然后它就进入里面换衣服了等它换好衣服了出来了老板CPU说你们这些靓仔可以进去了。------------------------------------------------------