我知道有一些原子指令,如test&设置和比较&交换指令,实现互斥锁的硬件实现。但是我很想知道在ARM上有一个像Compare或者单独交换的指令可以实现互斥锁吗?
我认为实现互斥锁需要至少两条指令(以原子方式执行)。
P.S。在描述了Compare和Swap之后,我在接受采访时被问到这个问题。更多关于ARM的优化目标。但是我想知道它在其他架构中是否可能吗?
答案 0 :(得分:1)
互斥锁是一种过高的级别机制,无法在单个指令中实现。它需要有关哪个线程持有锁的信息,具有锁的线程内互斥锁嵌套级别的计数,并且在基于优先级的抢先RTOS中需要优先级倒置机制,这涉及临时提升拥有锁的优先级线程。锁。
答案 1 :(得分:0)
即使是简单的自旋锁也只是一次操作中的坏主意。 ARM曾经有一些简单的交换"原子地将寄存器中的值与存储器中的值进行原子交换的指令,但它们不能很好地扩展到高频多核系统(因为您实际上必须锁定总线以确保交换的原子性),因此它们是从较新版本的架构中删除,并替换为多部分加载/存储专用指令。