gpt4 book ai didi

c - ARMv6 之前的 ARM 架构上的无锁原子操作

转载 作者:行者123 更新时间:2023-12-01 15:05:53 27 4
gpt4 key购买 nike

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

最佳答案

Are there any implementations thereof in C?



不。如果没有编译器或程序集的支持(编译器中的程序集支持),就不可能实现这是“C”。 'C' 没有指令来保证某事以原子方式执行。

The only possible solution for previous architectures seems to be to disable/enable IRQs, which makes the operations blocking.



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

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

关于c - ARMv6 之前的 ARM 架构上的无锁原子操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44883426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com