【 在 wjhtingerx 的大作中提到: 】
: 比如:
: 线程1:
: b=2;
: ...................
乱序当然会发生,线程1如果改成:
d = b
b = 2
a = 1,
那么a= 1更可能先执行,线程2的程序c=b当然会执行,只不过一般后果无所谓所以你看不到啥后果。
如果a=1的时候c只能被赋值为2否则系统就爆炸,那只要运行事件够长这种逻辑运行次数够多,你一定能看到系统爆炸。
爆炸一次,你就会想办法通过互斥信号量,原子操作,读写同步(ARM上就是DMB/DSB/ISB)等指令来保证逻辑正确。
最简单的, b=2后面增加dsb指令,确保数据写执行完成以后系统才能执行后面的数据操作。
--
修改:beanspower FROM 111.197.20.*
FROM 111.197.20.*