• 理解Memory Order

    经典计算机指令的先后顺序往往也意味着逻辑关系,我们总是会直觉性的认为程序指令是从上到下一个个执行的。虽然这种直觉在很多场景下是没有问题的,但真相不止于此。如果你对memory order这个概念还不是太了解,下面这个test应该会带来一点“惊喜” ^_^

    // 代码段1
    // store-buffering校验
    P0(int x0, int x1)
    {
        int r2;
        WRITE_ONCE(x0, 2); r2 = READ_ONCE(x1); 
    }
    
    P1(int x0, int x1)
    {
        int r2;
        WRITE_ONCE(x1, 2); r2 = READ_ONCE(x0); 
     }
    
    exists (1:r2=0 / 0:r2=0)
    

    这个test的形象使用场景是——两个线程各自持有一个buffer,业务逻辑是写一次自己的buffer后读一下对方的buffer。P0和P1分别代表在两个处理器上跑的逻辑(刚开始x0,x1… 【查看更多】