说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

(*((volatile unsigned int *)(addr)))

编辑:说三道四文库 发布时间:2018-08-18 04:47
HTML文档下载 WORD文档下载 PDF文档下载
#define CONTENTS_OF(addr) \
        (*((volatile unsigned int *)(addr)))
************************************
请问: volatile 有什么好处?为什么要这么用?
谢谢
volatile表示不要优化,每次读都到内存中去读.
比如volatile i;你写个程序for(i= 0; i<100000; i++)可能i就被优化后放到寄存器里了.内存中的值一直得不到刷新.而另外一个线程可能当i=10000时要做什么,这样就出错了.
这个关键字好像在多线程和固件里用的挺多的.
谢谢  zxm927(淡泊明志)  的热情解答
------
还有没有更多的隐含意思呢?
其实变量被操作的时候总是会被拷贝一份副本的。这样在多进程中可能会导致错误修改变量

使用volatile 可以让变量不被拷贝副本,所以就不会出错了。
还有这样的用法呢
const volatile int i;
说明这个i就是专门给其他线程改的^^
自己不去改,但是必须知道其值,在某些简单线程同步的时候可以用上
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘