理解c++内存一致性模型
我对内存屏障以及C++11引入的memory order一直处于一知半解的状态
知道有这么个东西,知道一部分原理,不知道什么场合去用它,一直以来我的多线程工具库里面只有锁,条件变量和原子变量三板斧,错过了很多更细粒度的优化机会。
在ChatGPT的帮助下,终于从头到尾理解了它的底层原理和应用场景
本文属于拾人牙慧的总结,将看到的一些资料整理出来,本文的大纲如下:
缓存一致性
从cpu缓存开始,引出多核cpu的缓存一致性(Cache Coherence)问题
为了解决这个问题,发明了MESI协议,但是这个协议性能还不够好,因此引入了Store Buffer和Invalidate Queue来提高性能
内存一致性
Store Buffer,Invalidate Queue再加上编译器指令乱序和cpu指令乱序,导致了内存一致性(Memory Consistency)无法得到满足
使用各种内存屏障来解决这些问题
C++的memory order
为了简化和细化内存屏障,C++11引入了memory order