是否有任何規則可以在多核中同時訪問共享內存? 如果一個內核正在編寫共享內存,另一個內核正在同一時間讀取相同的內存,是否有任何問題? 應該避免這種情況?Multicores:同時訪問共享內存
0
A
回答
0
這被稱爲競態條件,這樣的代碼的結果將是不可預知的。你必須避免它。你可以:
- 改變要使用的算法不同的存儲器,或通過使用原子操作
- 同步訪問,或通過使用更高級別的同步構造,如臨界區或互斥
- 同步訪問。
正如@DanDan所說,只有從多個線程讀取並不是問題。
0
是的,你需要避免這種情況。只有在沒有副作用的情況下才能同時讀取多核和多線程可以安全執行的操作。
相關問題
- 1. 訪問共享內存同步
- 2. OpenCL-共享內存訪問
- 3. 多個線程可以同時訪問共享內存嗎?
- 4. 無法訪問共享內存
- 5. 訪問控制共享內存
- 6. Node.js線程共享內存訪問
- 7. 跨線程共享內存訪問
- 8. 原子訪問共享內存
- 9. 共享和全局內存訪問
- 10. 訪問共享存儲器
- 11. 同步共享內存
- 12. C內存共享問題
- 13. 共享內存問題
- 14. cuda奇怪的內存訪問錯誤共享內存
- 15. CUDA非法內存訪問可能'不足'的共享內存
- 16. cuda全局和共享內存訪問時間
- 17. 模仿客戶端時訪問共享內存
- 18. Windows共享內存訪問時間較慢
- 19. 同時訪問共享內存是否會導致性能下降?
- 20. 內存共享
- 21. 使用Large_Int訪問共享內存的問題
- 22. C#,存儲/訪問共享成員
- 23. CUDA共享內存
- 24. C共享內存
- 25. 在共享內存
- 26. RDMA內存共享
- 27. 共享內存段
- 28. Linux共享內存
- 29. 通過共享內存共享指針
- 30. ABAP:共享內存對象同步
可以使用互斥信號來避免這種情況嗎? E.G .:一個核心,如果(!LOCK)LOCK = TRUE;另一個核心如果(!LOCK)LOCK = TRUE,並且LOCK在兩個CORES之間共享。當一個核心執行LOCK = TRUE時,另一個核心恰好在同時執行if(!LOCK),是否可以這麼做? – shikun 2012-03-30 03:35:11
不,這也是布爾變量的爭用條件。您必須使用適當的互斥對象(無論您的語言/操作系統是什麼意思)。 – 2012-03-30 07:15:10