我實際上聽說過兩種說法。我懷疑他們不是,但我想讓話題得到解決。C++中的指針賦值原子嗎?
回答
C++ 03不知道線程是否存在等,因此原子的概念並沒有太大的意義了C++ 03,這意味着它不會說的任何東西。
C++ 11確實知道線程,但再次沒有提到分配指針的原子性。但是,C++ 11確實包含std::atomic<T*>
,它保證是原子的。
請注意,即使寫入原始指針是你的平臺上原子編譯器仍然可以自由地走動是assingment,所以並沒有真正買任何東西。
如果你需要寫這線程之間共享的指針請使用std::atomic<T*>
(或尚未正式boost::atomic<T*>
,GCCS互鎖原子內部函數或Windows *)或包裝所有訪問的互斥該指針。
你可以在這裏獲得boost.atomic:http://www.chaoticmind.net/~hcb/projects/boost.atomic /doc/index.html – 2012-02-07 14:49:38
C++標準沒有定義特定的線程行爲。取決於編譯器和平臺,指針分配可能是原子的,也可能不是原子的。
C++ 11 * does *定義了線程行爲和相關的內存模型。 – 2012-01-19 01:29:41
@Frizlab和J.N.你們都是對的。如同說保時捷是一款跑車是正確但不精確的,因爲不是每一款車型都是跑車:) – mloskot 2012-11-22 11:31:22
- 1. C#中的複合賦值^ =原子嗎?
- 2. 指針賦值錯誤C
- 3. 將值賦給指針C
- 4. C++ const char *指針賦值
- 5. c字符指針賦值
- 6. 指針的memcpy與賦值相同嗎?
- 7. 關於原子指針賦值的保證
- 8. 賦值使指針中的整數無指針C
- 9. 將偏移值賦值給指針C
- 10. 賦值=和減法賦值 - = C中的原子操作?
- 11. 警告的指針賦值
- 12. C++匿名結構指針賦值
- 13. C函數指針賦值警告
- 14. C指針賦予隨機值
- 15. 賦值給指針2d指針
- 16. 賦值使指針無整型指針
- 17. C++指針。如何爲指針結構賦值?
- 18. Java指針寫入原子嗎?
- 19. 空指針賦值錯誤。
- 20. 指針引用賦值
- 21. 忽略指針賦值
- 22. 空指針賦值錯誤
- 23. JavaScript函數指針賦值
- 24. 函數指針賦值
- 25. 因爲指針賦值
- 26. 指針變量賦值
- 27. 爲指針賦值無新
- 28. 指向函數賦值的指針
- 29. 指向結構argv賦值的指針
- 30. 在指針中賦值的麻煩
另請參見http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic – sth 2012-01-19 01:09:28
如果是這樣的話,C++將不需要'atomic' :) –
2012-01-19 01:31:16