volatile和锁

让编译器不要将变量缓存到寄存器,而是每次去访问主板上的内存

可见性
对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入

原子性
对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性(volatile的使用不要依赖自身)

不被编译器优化

XBYTE[2]=0x55;
XBYTE[2]=0x56;

使用地方

  • 中断服务程序中修改的供其它程序检测的变量
  • 多任务环境下各任务间共享的标志
  • 存储器映射的硬件寄存器

性能比较
volatile的开销要比锁获取低

posted @ 2017-04-26 19:10  thomas_blog  阅读(109)  评论(0编辑  收藏  举报