volatile和锁

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

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

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

不被编译器优化

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

使用地方

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

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

原文地址:https://www.cnblogs.com/zhangxuechao/p/11709726.html