gpt4 book ai didi

multithreading - TILE-Gx 上的内存屏障和 Linux 内核自旋锁

转载 作者:行者123 更新时间:2023-12-04 08:52:29 26 4
gpt4 key购买 nike

在 TILE-Gx 架构的 Linux 内核自旋锁实现中,看起来它们在锁定时不会发出任何内存屏障(仅在解锁时):

https://github.com/torvalds/linux/blob/master/arch/tile/include/asm/spinlock_64.h

那么我不明白为什么指令不能在锁定之上重新排序,这会导致程序员认为在持有锁定时执行的指令在锁定之前实际执行?

其他架构似乎至少有一个编译器障碍:

  • ARM 的自旋锁有一个内存屏障:

    https://github.com/torvalds/linux/blob/master/arch/arm/include/asm/spinlock.h

    附评论:

    A memory barrier is required after we get a lock, and before we 
    release it, because V6 CPUs are assumed to have weakly ordered
    memory.
  • 而且 x86 的自旋锁有一个编译器屏障:

    https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/spinlock.h

    附评论:

    barrier();     /* make sure nothing creeps before the lock is taken */

  • 为什么 TILE-Gx 与众不同?我认为它的内存模型和 ARM 的内存模型一样弱。为什么他们甚至没有编译器障碍?

    最佳答案

    锁定功能arch_spin_lock用途 arch_spin_lock_slow ,反过来使用 cmpxchg . cmpxchg的实现包括一个内存屏障指令(见 http://lxr.free-electrons.com/source/arch/tile/include/asm/cmpxchg.h)。

    关于multithreading - TILE-Gx 上的内存屏障和 Linux 内核自旋锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20549850/

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