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

 借钱买黄瓜 发布于 2023-02-11 11:17

在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的spinlock有一个编译器障碍:

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的内存模型一样弱.为什么他们甚至没有编译器障碍?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有