经典计算机指令的先后顺序往往也意味着逻辑关系,我们总是会直觉性的认为程序指令是从上到下一个个执行的。虽然这种直觉在很多场景下是没有问题的,但真相不止于此。如果你对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… 【查看更多】
最新评论