ARMv6之前的ARM体系结构上的无锁原子操作

时间:2017-07-03 10:35:09

标签: c arm atomic atomicity lock-free

C中是否有任何实现?到目前为止,我所看到的所有内容都基于LDREX / STREX指令,这些指令仅在ARMv6架构中引入。以前架构唯一可能的解决方案似乎是禁用/启用IRQ,这会使操作阻塞。

1 个答案:

答案 0 :(得分:-2)

  

C中是否有任何实现?

没有。如果没有编译器或程序集的支持(编译器中的程序集支持),就不可能实现这个'C'。 'C'没有指示保证某些内容以原子方式执行。

  

以前架构的唯一可能解决方案似乎是禁用/启用IRQ,这会使操作阻塞。

许多无锁算法需要'CAS'(比较和设置)。 swpswpb可用于执行一些原始的四值操作,但它们不是CAS。为了完成四个源和一个消费者,您可以使用swpb将四个字节中的每个字节分配给源,并让消费者使用swp来传输四个“工作”字节。 ARMv6之前的大多数ARM cpu都是单核,而锁定中断是常用的方法。 ARMv6内核支持LDREX / STREX。 swp指令不是多CPU友好的,因为它锁定事务的整个总线(读/写)。但是,swp可以用于自旋锁,如果它是唯一可用的东西。

Linux支持与OS help进行“比较和交换”。要点是一个小的固定汇编程序序列进行比较和交换。中断和数据中止代码被挂钩以确保此代码是否被中断以重新启动。