__sync_synchronize有什么作用?

时间:2009-06-11 16:22:54

标签: c++ c linux

我看到answer to a question regarding timing使用了__sync_synchronize()。

  • 这个功能有什么作用?
  • 何时需要使用?

3 个答案:

答案 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);