簡體   English   中英

__sync_synchronize 有什么作用?

[英]What does __sync_synchronize do?

我看到了一個關於使用 __sync_synchronize() 的時間問題的答案

  • 這個 function 有什么作用?
  • 什么時候需要使用?

它是完整內存屏障的原子內置函數。

不會在整個操作中向前或向后移動內存操作數。 此外,將根據需要發出指令,以防止處理器推測整個操作的負載以及在操作之后對存儲進行排隊。

檢查上面鏈接的詳細信息。

我猜它會強制使用內存柵欄

這個內置函數會發出一個完整的內存屏障。

對於內存屏障,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);

它停止排隊寫入和緩存讀取。

“volatile”是使用代碼立即獲取或存儲值的編譯器選項,但現代 CPU 也有多個內核,帶有 memory 緩存和延遲寫入外部 memory。 __sync_synchronize() 確保所有內核同時看到相同的值。

...
X = new_value; // compiler and/or CPU could update X later when convienent
...
if ( X ) ... // compiler and/or CPU could use previous cached value of X
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM