Linux下原子操作(信号量 自旋锁)的实现原理和底层代码分析

csdn越改版,越丑。

开始我们的主题:Linux下原子操作(信号量 自旋锁)的实现原理和底层代码分析

                                                                                             2017年8月27日12:47:02

1.何为原子操作?

原子操作是什么,这个名字就代表了他的意思,以前物理界认为原子已经是最小的,不开再分的粒子,显然现在已经被推翻,“科学吗,总是从正确走向错误”,我记得一次有人问我一个协议,我说错了,正当他要嘲笑我时,抖个机灵,"协议这种东西没有绝对,看你如何解析"。我们这里的 ”原子操作“的意思就是:这个操作是不开再分的,是一次完成的,是打断不了的,也是不能打断的,就犹如我们常说没有 1/2个人似的。当然引入原子操作的这个概念对于我们代码上来说就是:如果这块代码是原子操作的,那就意味着,操作系统在调度的时候,这块代码必须是被连续的,完整的执行完,而不是被其他进程或者线程重入。为什么这个代码要有如此特性,其实也就是我们常说的临界资源。如果代码段中含有操作共共享资源的代码,那么我们就要注意了。我们来看个例子。我们有俩个线程 操作一个全局变量 i。目的相同都是i++。下图是我反汇编i++的汇编代码,我们可以非常清晰的看到,对于i++

汇编代码的做法是,首先把i的值放入 eax寄存器,然后eax寄存器加1,然后把eax的值再放回i的内存空间。

Linux下原子操作(信号量 自旋锁)的实现原理和底层代码分析_第1张图片







你可能感兴趣的:(linux内核)