转载:
C/C++ 中的 volatile - 知乎 (zhihu.com)
重点:
编译器会对代码进行优化,通常编译器发现两次从i中读取数据的过程中,代码并没有对i进行操作,它就会自动读取上一次的数据。这时候编译器的操作是从寄存器上取数据。而正确的做法应该是从内存上取数据,让每次数据都从内存上取数据,这样虽然会导致消耗时间和性能,但是会保证正确性,特别是多线程访问数据的时候,很容易发生问题。而采用volatile,则会保证编译器每次都是从内存上取数据。所以多线程的时候要保证多个线程操作同一个数据的准确性,要在变量前加volatile。或者可以将变量声明定义成atomic.利用变量原子性操作。