我看到answer to a question regarding timing使用了__sync_synchronize()。
答案 0 :(得分:28)
它是full memory barrier的原子内置。
操作中不会向前移动任何内存操作数 或落后。此外,将根据需要发布说明 防止处理器在操作中推测负载 在行动之后从排队商店。
检查上面链接的详细信息。
答案 1 :(得分:3)
我猜是memory fence。
答案 2 :(得分:2)
这个内置函数会发出一个完整的内存屏障。
对于内存屏障,cpu对我们的指令进行排序,一般会提高效率,但可能会导致意想不到的结果。例如,硬件中可能有四个寄存器:当你发出操作命令时,一个寄存器保存你的操作指令(如读取),两个寄存器保存参数(如地址、大小),最后一个寄存器是一个控制登记。所有参数准备好后,硬件将读取参数并执行程序,程序如下所示:
writereg (dev.register_size,size);
writereg (dev.register_addr,addr);
writereg (dev.register_cmd,READ);
writereg (dev.register_control,GO);
如果最后一个操作码放在其他之前,那不是我们所期望的,所以我们可以在前三个代码和最后一个代码之间放置一个内存屏障,强制CPU在之后操作最后一个代码前三个代码:
writereg (dev.register_size,size);
writereg (dev.register_addr,addr);
writereg (dev.register_cmd,READ);
__sync_synchronize();
writereg (dev.register_control,GO);