- 主题:CPU指令乱序执行的好处是啥?
这一块你可能需要查一下关于memory consistency model的资料。和乱序执行有关的可能是乱序load的问题。
【 在 wjhtingerx 的大作中提到: 】
: 如果多线程共享全局变量之类的场景,指令乱序执行怎么确保运行正确呢?
--
FROM 103.90.178.*
【 在 nottop2 的大作中提到: 】
: 以前看linux内核,对barirree很是迷惑,后来才知道,我就不应该去看那本书,
为啥
--
FROM 123.126.3.*
应为工作中从来用不到
【 在 stub 的大作中提到: 】
: 为啥
--
FROM 180.143.19.*
比如,arm Linux应用编程,barrier的api一般是啥?
比较奇怪的是,应用开发大量线程共享变量的情况,我很少看到有人设barrier,但好像也没啥大的问题,这是为啥呢?
【 在 cybereagle 的大作中提到: 】
: CPU确保乱序执行对单线程不改变语义
: 多线程情况提供各种barrier给开发者使用
: 开发者负责根据自己的需求准确使用这些指令达到所需效果
--
FROM 36.112.69.*
因为编译器/库里有 barrier 指令啊
【 在 wjhtingerx 的大作中提到: 】
: 比如,arm Linux应用编程,barrier的api一般是啥?
: 比较奇怪的是,应用开发大量线程共享变量的情况,我很少看到有人设barrier,但好像也没啥大的问题,这是为啥呢?
--
FROM 220.200.24.*
你的意思编译器会明白线程共享变量场景,然后自动加上barrier指令,不能吧?
【 在 cybereagle 的大作中提到: 】
: 因为编译器/库里有 barrier 指令啊
--
FROM 36.112.69.*
不一定基于线程共享变量
比如 java 从语言层面定义了 volatile 有 happen-before 的语义
那么在实际编译执行 volatile 变量读写语句的时候
编译器/jvm就会负责插 barrier 指令以使代码行为符合语言标准
【 在 wjhtingerx 的大作中提到: 】
: 你的意思编译器会明白线程共享变量场景,然后自动加上barrier指令,不能吧?
--
FROM 220.200.24.*
但是C语言呢,没几个人会知道插入barry啊
【 在 cybereagle 的大作中提到: 】
: 不一定基于线程共享变量
: 比如 java 从语言层面定义了 volatile 有 happen-before 的语义
: 那么在实际编译执行 volatile 变量读写语句的时候
: ...................
--
FROM 36.112.69.*
【 在 wjhtingerx 的大作中提到: 】
: 但是C语言呢,没几个人会知道插入barry啊
:
那是因为大多数人用C搞的是协议栈等上层应用吧。
做OS内核和外设驱动的,对barrier一定要深刻理解,否则就不是一个合格码农
--
FROM 111.197.112.*
先找个讲C++ memory model的文章仔细啃一下,就啥都明白了
--
FROM 60.12.138.*