Chinaunix首页 | 论坛 | 博客
  • 博客访问: 914474
  • 博文数量: 119
  • 博客积分: 2493
  • 博客等级: 大尉
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-03 14:00
文章分类

全部博文(119)

文章存档

2013年(19)

2012年(100)

分类: LINUX

2012-06-03 15:26:45

一直看到一些书对volatile这个关键词的解释,都不懂说的什么东西,也很少见程序里面用过,自己
也一直不会用,今天在内核的中PCB里面的字段中见到它了。说说我的理解吧。

  1. struct task_struct {
  2.         volatile long state;
  3.         ...
  4. };
编译器有个“缓存”的优化方式,就是编译器发现两次使用同一个变量的时候,第一次取数会去内存取数,然后就将数缓存到寄存器里面,在第二次取数就去寄存器取。然而这中间就有可能改变这个值而出错。
这儿的volatile就是要告诉cpu每次取数都到内存去取数,要保证state这个值的正确性,可能是因为
这个state比较重要吧。

书本上volatile的作用是:声明可变类型的变量。可变就说明该变量的值很容易变化,所以要编译器不要优化它。



阅读(1652) | 评论(4) | 转发(1) |
给主人留下些什么吧!~~

zhe_wang2012-06-04 19:43:25

liurhyme: .....

liurhyme2012-06-04 11:33:20

zhe_wang2012-06-04 09:55:45

Aquester: 可以进一步多了解点:http://blog.chinaunix.net/uid-20682147-id-3160080.html,另外提一下,内核编程是要避免使用volatile.....
好的,这哥们博客写的不错,我linux学的比较菜,以后还请多多指点。

Aquester2012-06-04 09:39:37

可以进一步多了解点:http://blog.chinaunix.net/uid-20682147-id-3160080.html,另外提一下,内核编程是要避免使用volatile