程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 對 Data Race Free 的理解

對 Data Race Free 的理解

編輯:C++入門知識

對 Data Race Free 的理解


Data Race Free 的動機

Data Race Free 是對多線程程序 同步程度 的一種描述,假如你的多線程程序的同步程度滿足 DRF 的要求,那麼,你的程序會有這樣一個好處:

程序在弱一致性模型下執行,執行的結果與在SC模型下執行一樣

這意味著,程序員在寫程序時,可以按SC模型來推斷程序的執行。而程序在底層運行時,可以享受弱一致性模型帶來的種種優化措施。

Data Race Free 具體內容

DRF 要求多線程程序中不能有沖突的操作。

什麼是沖突的操作呢?

沖突的操作是指:兩個操作來自不同線程,操作同一地址,至少有一個是寫操作。

如何讓沖突的操作不沖突呢?

需要使用同步操作將沖突的操作隔離開。

為什麼要用同步操作將沖突的操作隔離開呢?

因為如果不隔離開,程序在弱一致性模型下執行的結果就和在SC模型下執行的結果不一樣了。這意味著如果你用SC模型推斷程序執行結果,而程序又運行在弱一致性模型下,那麼程序的真正結果可能和你推斷的不一樣。

那麼,又為什麼:如果不隔離開,程序在弱一致性模型下執行結果就和SC模型下不一樣了呢?

這個問題其實在問:為什麼隔離會使得程序在弱一致性模型下執行結果與SC模型下執行結果一致?

這個問題用一句話來回答是:隔離使得我們可以找到所有操作的一種全序,而這種全序正是SC所需要的。

同步操作將相互沖突的操作隔離開,這種隔離為原本無序的多線程程序添加了一些順序:

  • 同步操作之間有順序了
  • 同步操作與其之前的所有操作之間有順序了
  • 同步操作與其之後的所有操作之間有順序了

    這些順序保證了程序在弱一致性模型下與在SC模型下執行結果一樣。

    另外,我們還發現,有些操作之間並沒有順序保證,這正是DRF的優勢所在,這些無須順序保證的操作可以在弱一致性模型下得到優化,同時他們的無序又不會使得執行結果與SC下有任何不同。

    如果我們想找一個所有操作之間的全序,只需要在這些無須保證順序的操作中隨便選擇一個順序,另外,還需要保證那些因為同步而添加的順序關系。如此構成一個全序。這個全序正是SC模型所需要的。

    由此,我們也明白了DRF的精髓:

    只保證必要的順序,不保證不必要的順序。
    

    所謂必要是指,保證這些順序就可以使得程序在弱一致性模型下的執行結果與SC模型下的執行結果一致,不保證就不行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved