完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>
本帖最后由 ycd37850105 于 2016-9-18 21:41 编辑
我们把单指令的操作称为原子操作(Atomic),因为无论如何,单条指令的执行是不会被打断的。很多体系结构都提供了一些常用操作的原子指令,这些原子指令的作用就是避免多线程同时对一个共享数据进行读写操作。没有原子指令,可能会造成很恶劣的后果。一个著名的例子:
假设有两个线程要同时访问一个变量。
线程1:
i = 1;
++i;
线程2:
--i;
在很多体系结构上,++i的实现方法会如下:
A.读取i到某个寄存器X;
B. X++;
C.将X的内容存储回i。
由于这两个线程并发执行,因此两个线程执行的顺序可能如下(不同线程下的寄存器X不同,X1和X2代表线程1和线程2中的X):
从逻辑上看,程序执行完后i的值应该为1,但从上面的执行顺序可以看到,i的值为0。实际上这两个线程如果同时执行的话,i的结果有可能是0或1或2。可见,两个程序同时读写同一个共享数据会导致意想不到的后果。此时,原子操作指令就可以避免该情况发生。
|
||||||||||||||||||||||||||||||||
2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
1694 浏览7 评论
1471 浏览0 评论
IaaS+on+DPU(IoD)+下一代高性能算力底座技术白皮书
2626 浏览0 评论
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
1137 浏览0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board上OSPI-Flash实践
1618 浏览0 评论
66596 浏览21 评论
嵌入式热门DIY项目:智能机器人开源资料合集(原理图、代码、论文)
68178 浏览22 评论
小黑屋|手机版|Archiver|德赢Vwin官网(湘ICP备2023018690号)
GMT+8, 2024-8-30 15:46, Processed in 0.480844 second(s), Total 62, Slave 45 queries .
Powered by德赢Vwin官网 网
© 2015bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号