概述
多线程同步锁,原子锁为啥比较快
首先,说一下原子指令:
指令 | 效果 | 描述 |
leal S,D | D = &S | movl地版,S地址入D,D仅能是寄存器 |
incl D | D++ | 加1 |
decl D | D-- | 减1 |
negl D | D = -D | 取负 |
notl D | D = ~D | 取反 |
addl S,D | D = D + S | 加 |
subl S,D | D = D – S | 减 |
imull S,D | D = D*S | 乘 |
xorl S,D | D = D ^ S | 异或 |
orl S,D | D = D | S | 或 |
andl S,D | D = D & S | 与 |
sall k,D | D = D << k | 左移 |
shll k,D | D = D << k | 左移(同sall) |
sarl k,D | D = D >> k | 算数右移 |
shrl k,D | D = D >> k | 逻辑右移 |
里面的 ++ 和 -- 指令 分别是 incl 和 decl 指令
计算机字长 : 字长是CPU的主要技术指标之一,指的是CPU一次能并行处理的二进制位数,字长总是8的整数倍,通常PC机的字长为16位(早期),32位,64位
所以一般 等于 或者 小于 计算机字长的 指令操作,就是原子操作 。
incl 指令是一个 RMW(Read,Modify,Write) 操作,指令执行包括三个阶段:读内存,修改变量,写内存。
系统提供了一个 lock前缀,有lock 前缀 的只能用于 防存指令,在执行期间,内存总线会被锁定,知道 指令 执行结束。
这样的lock_incl 的指令 被称为 原子 操作 。
结论 :
而类似于 windows 下面的 临界区 ,由于需要锁定 执行的 指令 比较多,每次 读取的字节数 也 有可能 大于 计算机字长 ,所以需要多次 lock_incl 操作,所以相比较真正的 原子操作 ,会比较慢。
很多时候,我们的共享数据都大于一个字长,更新操作也不是一条指令就可以完成的。更多时候,我们还需要保证一组共享数据的一系列更新的原
子性。
最后
以上就是平常硬币为你收集整理的原子操作为啥比较快多线程同步锁,原子锁为啥比较快的全部内容,希望文章能够帮你解决原子操作为啥比较快多线程同步锁,原子锁为啥比较快所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复