同步

2011-02-25 50 views
1

由於this部分問題沒有解決,我讓它成爲一個單獨的問題:同步

#include<iostream> 
#include<thread> 
using namespace std; 

void f2(double* ret) { 
    *ret=5.; 
} 

int main() { 
    double ret=0.; 
    thread t2(f2, &ret); 
    t2.join(); 
    cout << "ret=" << ret << endl; 
} 

這是程序的數據競爭免費的嗎?
對於新的C++內存模型,是否有任何保證從線程t2訪問變量ret而線程main是同步的?

我的意思是,如果程序在同一個內核上執行,很顯然t2main的訪問不會發生衝突。
但是,如果t2main在不同的內核上執行?
main繼續執行之前是否有任何保證核心的緩存將同步?

我很感激,如果有人可以提供相同的參考。

謝謝。

+1

這裏沒有隱式的同步。 'join'是線程之間的顯式同步。 –

+0

好的,我改了標題。 – Predrag

回答

5

您的程序是免費的數據競賽。 [thread.thread.member]/P5描述加入()與同步段:

同步:由下式表示的線程完成*此同步 與(1.10)對應的成功的加入()的返回。 [注意:*上的操作不同步。 -endnote]

(1.10)指的是[intro.multithread],它是一段太長而不能引用的部分,但卻極其詳細地定義了短語「與...同步」。

最新的工作草案是N3225