棋子 · 2020年05月06日

ARMv8之exclusive操作(二)exclusive操作例子

之前,提到了为什么要引入exclusive操作。ARM对于exclusive操作,新增了exclusive指令。

下面以一个例子,来说明下,这个是如何工作的。

以以下代码进行说明,标准的抢锁代码:
image.png
线程0执行LDXR指令,exclusive的load操作,读取锁状态。此时线程0的monitor状态变为exclusive状态。
image.png
当线程0执行STXR指令,exclusive的store操作,此时monitor状态是exclusive状态,因此store可以成功,W2的值被更新为0。

当线程0的monitor状态从exclusive状态切换到open状态时,硬件会自动将线程1的monitor状态从exclusive状态切换到open状态。因为两个cpu的monitor,检测的地址,是一样的。这种情况下,一个cpu的monitor状态从exclusive状态切换到open状态,硬件就会自动将另一个cpu的monitor状态从exclusive状态切换到open状态。

W2值被更新成0,表示线程1获取到锁。
image.png
线程1没有获取到锁,返回执行lock函数。再执行LDXR指令,获取锁状态。
image.png
image.png
后面不管线程1,执行多少次LDXR,monitor的状态依然是exclusive状态,因此monitor从exclusive切换到open状态,是通过exclusive store指令或者一些其他事件,来进行切换的。

以上是2个线程通过exclusive指令,抢锁的过程,扩展到多个线程,多个cpu,原理也是一样的。最终,只会有一个线程,抢到锁,其他的线程均抢不到,并且monitor的状态为exclusive状态。

所以,在多核的系统中,抢锁的这种操作,软件是要使用exclusive操作,来抢锁的。这也是为什么,在多核的系统中,硬件是需要实现exclusive操作的。



系列其他篇

原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。
推荐阅读
关注数
23381
内容数
889
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息