2012-01-19 94 views
10

我實際上聽說過兩種說法。我懷疑他們不是,但我想讓話題得到解決。C++中的指針賦值原子嗎?

+2

另請參見http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – sth 2012-01-19 01:09:28

+1

如果是這樣的話,C++將不需要'atomic ' :) – 2012-01-19 01:31:16

回答

14

C++ 03不知道線程是否存在等,因此原子的概念並沒有太大的意義了C++ 03,這意味着它不會說的任何東西。

C++ 11確實知道線程,但再次沒有提到分配指針的原子性。但是,C++ 11確實包含std::atomic<T*>,它保證是原子的。

請注意,即使寫入原始指針是你的平臺上原子編譯器仍然可以自由地走動是assingment,所以並沒有真正買任何東西。

如果你需要寫這線程之間共享的指針請使用std::atomic<T*>(或尚未正式boost::atomic<T*>,GCCS互鎖原子內部函數或Windows *)或包裝所有訪問的互斥該指針。

+0

你可以在這裏獲得boost.atomic:http://www.chaoticmind.net/~hcb/projects/boost.atomic /doc/index.html – 2012-02-07 14:49:38

2

C++標準沒有定義特定的線程行爲。取決於編譯器和平臺,指針分配可能是原子的,也可能不是原子的。

+8

C++ 11 * does *定義了線程行爲和相關的內存模型。 – 2012-01-19 01:29:41

+1

@Frizlab和J.N.你們都是對的。如同說保時捷是一款跑車是正確但不精確的,因爲不是每一款車型都是跑車:) – mloskot 2012-11-22 11:31:22