Q
中間值和線程安全
2
A
回答
1
使用as-if規則,優化編譯器可以(幾乎)使用不涉及原子的表達式來處理任何喜歡的表達式,因爲其他線程無法觀察到數據爭用程序中的差異。所以是的,編譯器可以做到這一點,其他線程只能通過數據競賽看到中間結果。
-1
我沒有準入標準的權利,但根據http://en.cppreference.com/w/cpp/language/eval_order:
8)的副作用(左參數的修改)內置 賦值運算符和所有的內置複合賦值操作符 在 的值計算(但不是副作用)之後被排序,並且在賦值表達式的值 之前排序(也就是在返回 之前的參考)修改後的對象)
這似乎是在說a
的修改在b + c
的評估後被排序,所以編譯器無法分兩步修改a
。
這並不妨礙優化器做任何事情,但我看不出有任何理由將它寫入a
兩次。
相關問題
- 1. 線程安全和性能之間
- 2. java線程安全:線程安全嗎?
- 3. Django中間件線程安全嗎?
- 4. PHP線程安全和非線程安全的Windows
- 5. 線程安全訪問數組和線程安全訪問
- 6. 休眠和線程安全:注入的SessionFactory線程安全嗎?
- 7. OSGI ServiceTracker和線程安全
- 8. SharedPreferences和線程安全
- 9. C++線程安全和notify_all()
- 10. python WSME和線程安全
- 11. urllib2和cookielib線程安全
- 12. Scintilla和線程安全
- 13. UIKit和GCD線程安全
- 14. NSNotificationCenter和安全多線程
- 15. 的ConcurrentHashMap和線程安全
- 16. 塊和ViewController線程安全
- 17. 線程安全和AfxMessageBox
- 18. CryptoAPI:CERT_STORE_PROV_MEMORY和線程安全
- 19. cTAKES和線程安全
- 20. 單例和線程安全
- 21. 塊,線程安全和NSMutableDictionary
- 22. 線程安全和`const`
- 23. Azure WebJobs和線程安全
- 24. MethodHandle和線程安全
- 25. DataTable和線程安全
- 26. Django和線程安全
- 27. Winsock和線程安全
- 28. SharePoint和線程安全
- 29. 線程安全和MEF CompositionContainer
- 30. Java:Swing庫和線程安全
嗯,我不知道,但我非常懷疑它。 – Doorknob
這是關於C++ 11的嗎?是否有任何原子變量參與? – dyp
在常見的體系結構上,沒有針對內存的添加指令;它必須通過一個寄存器,然後將結果移回內存,所以我沒有看到編譯器有這樣做的任何理由。不過,我不確定標準的保證。 –