2013-03-27 97 views
2

在多線程環境中有一個變量(例如int temp;)。 一些線程寫入它,寫鎖受保護。而其他人則讀取變量,但沒有任何鎖定。在多線程環境中讀取變量總是有效嗎?

我的問題是: 如果這個變量被某些線程重複地寫成SET(例如{1,2,3}), 中的一個元素。 當我讀它時,它總是其中之一。

+1

您可能會發現這有助於:http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – hmjd 2013-03-27 10:42:22

+0

是的,Skizz的答案可以幫助我。 – 2013-03-27 11:19:40

回答

0

是的,它會,如果你的變量的類型是不可改變的,因爲SET不允許重複

參考SET

+0

嗯,看來你誤解了我的話。我的SET在這裏意味着一組值,例如{1,2,3}。 – 2013-03-27 09:30:34

+0

你已經提供了一個鏈接到javadoc,即使這是一個C++的問題? – trojanfoe 2013-03-27 10:42:22

0

如果從集以外沒有人寫值,該值將保持從這組。你可能需要在你的情況下使用volatile

4

規則非常簡單:如果兩個或多個線程訪問相同的變量,這些線程中的至少一個寫它,你必須同步所有這些訪問的。如果你不這樣做,行爲是不確定的。

volatile在這裏沒有幫助;要麼使用互斥量,要麼使用條件變量,或者使變量本身成爲原子。 (而「原子」意味着C++ 11原子,而不是某些人認爲在多線程應用程序中表現得相當好的屬性選擇)。

+0

我同意你的意見。我在這裏提出這個問題是因爲我看過很多代碼,假設我的問題的答案是'是',這讓我非常困惑。但它通常可能是'是',:) .. – 2013-03-27 11:33:27