C++ 并发编程

发布于

代码和输出结果如图,load应该要保证会读到store的值不是,为啥会是0呢?按照我的理解load应该会阻塞,等待store,哪个大佬能给解释下

2
评论 1
收藏
  • 这其实是编译器的锅,因为在编译器看来你在线程1中对X和对Y的操作是没有关联的,所以编译器不会保证在运行y.load的时候x.store已经运行。 再比如说有一个线程有 y++;x=1; 由于xy之间没有关联,在其他线程看来运行的顺序有可能是x=1;y++; 所以并不能保证x==1的情况下y一定加一了。 就是这种在编译器看来“无关联”的操作 导致很多时候要用锁来解决同步的问题。你可以使用mutex锁来实现(开销较大),或是使用atomic的乐观锁(开销较小)。你可以去看看《C++标准库 第二版》的第18章。或是搜索mutex和乐观锁的相关信息