cmpxchg解释
2021-10-20 10:46:25 0 举报
指令cmpxchg解释,cpu指令自旋锁实现解释
作者其他创作
大纲/内容
即时间t内无其他线程修改变量D:时间t内无打断,故可以用newVal覆盖变量D
cmpxchg
图例蓝色箭头为赋值绿色方框为操作码白色方框为寄存器或主存变量红色无箭头连线为判断是否相等
是否相等?
从时刻i又过了时间t后的变量D: D i+t
在时刻i的变量D: D i
指令2
指令1
D为主存中一变量
newVal
不等
相等
D为主存中一变量, D i 为 变量D在时刻i的值(时刻i的变量D)D i+t 为 变量D在时刻i+t的值(从时刻i又过了一段时间t 的时刻 下 的 变量D) 执行步骤如下:1、 判断 时刻i的D 与 时刻i+t的值 是否相等? \t\t\t相等就意味着在这时间t内 没有别的线程修改过变量D, 这是期望的情况,即所谓非打断:在时间t内没有被打断。\t\t\t不相等就意味这在这时间t内 有被别的线程修改过变量D,这不是期望的情况,即所谓被打断了:在时间t内被打断了。2、 若相等 说明这段时间t内变量D没有被其他线程修改过 则本线程可以修改变量D 所以用newVal覆盖变量D3、 若不相等 说明这段时间t内变量D被其他线程修改过 本线程不可以修改变量D \t\t\t需要将其他线程修改过的变量D作为返回值返回 约定返回值放在EAX中 故用D i+t覆盖EAX
将被其他线程改成的D i+t放到EAX,即返回给调用者
EAX
即时间t内有其他线程修改变量D:时间t内有打断,故不可以用newVal覆盖变量D
0 条评论
下一页