2015-03-25 56 views
0

我知道有几个原子指令,如test & set,比较& swap指令,它们实现了互斥量的硬件实现。但是我很想知道是否有像ARM或ARM这样的单独指令可以实现互斥锁?执行单CPU互斥指令的ARM

我认为至少需要两条指令(原子执行)才能实现互斥锁。

P.S.在描述Compare和Swap后,我在采访中被问到了这个问题。针对ARM的更多优化目标。但是我想知道它在其他架构中的可能性吗?

+2

您可以通过以下方式自己回答:a)简单地查看指令集,b)比较任何开源操作系统中现有的ARM互斥锁实现。虽然答案[将来可能会改变](http://community.arm.com/groups/processors/blog/2014/12/02/the-armv8-a-architecture-and-its-ongoing-development),它的在任何打击生产之前将会有一段时间。 – Notlikethat 2015-03-25 09:07:11

回答

1

一个互斥对象在单个指令中实现的级别机制太高。它需要关于哪个线程持有锁的信息,线程中带有锁的互斥层级的计数,以及基于优先级的抢占式RTOS需要优先级反转机制,其中包括暂时提升拥有锁。

0

即使简单的自旋锁在单一操作中往往是一个坏主意。 ARM曾经有过一些简单的“交换”指令,它们将寄存器中的值与存储器中的值原子交换,但是它们不能很好地适应高频率多核系统(因为您必须锁定总线以确保原子性的交换),所以他们从新版本的体系结构中删除,并替换为多部分加载/存储专用指令。