多线程中值不同步的原因

563 阅读1分钟

多线程中值不同步

多个线程同时操作变量a的时候,线程不是直接使用内存中的数据,实际情况是为了提高效率,每个线程都会将数据
加载到自己线程的寄存器中,修改完毕后将数据更新到内存中。

线程一的寄存器-------------------内存-------------------线程二的寄存器

这就会导致两个问题,
    一个是线程一已经改变了线程寄存器的值,但还没有来得及将数据更新到内存
    一个是内存中的数据已经更新了,但还没有来得及将数据更新到线程二的寄存器

何时用std::atomic何时不用

最一般的情形是(主线程和子线程都会修改同一个变量)或者(一个线程修改另一个线程使用)的时候,
    这时候要么使用std::atomic,
    要么另外定义锁std::mutex variable_mutex
    
如果只在一个线程中修改和使用变量,就不需要加锁操作