虽然在C#和java等语言中volatile关键字可以使用在多线程中(由于增加了内存屏障等机制的保护),
但是在C++中volatile关键字并不适用于多线程 。
volatile关键字的作用是读取的时候直接从内存中读取(但是写入不会直接写入内存)以及告诉编译器不要过分优化相关代码(更改顺序等),可以用于读取易变的硬件,或者处理signal的情况。
C++中多线程数据可以使用CAS原子操作(<atomic>),或者加锁来实现。
(CAS原子操作的实现中包括内存栅栏——因此可以保证多线程安全)
网友评论