是否有任何規則可以在多核中同時訪問共享內存? 如果一個內核正在編寫共享內存,另一個內核正在同一時間讀取相同的內存,是否有任何問題? 應該避免這種情況?Multicores:同時訪問共享內存
0
A
回答
0
這被稱爲競態條件,這樣的代碼的結果將是不可預知的。你必須避免它。你可以:
- 改變要使用的算法不同的存儲器,或通過使用原子操作
- 同步訪問,或通過使用更高級別的同步構造,如臨界區或互斥
- 同步訪問。
正如@DanDan所說,只有從多個線程讀取並不是問題。
0
是的,你需要避免這種情況。只有在沒有副作用的情況下才能同時讀取多核和多線程可以安全執行的操作。
相關問題
- 1. OpenCL-共享內存訪問
- 2. 訪問控制共享內存
- 3. 無法訪問共享內存
- 4. 原子訪問共享內存
- 5. 共享內存問題
- 6. C內存共享問題
- 7. CUDA非法內存訪問可能'不足'的共享內存
- 8. Windows共享內存訪問時間較慢
- 9. 模仿客戶端時訪問共享內存
- 10. 同時訪問共享內存是否會導致性能下降?
- 11. 內存共享
- 12. 使用Large_Int訪問共享內存的問題
- 13. C共享內存
- 14. Linux共享內存
- 15. 共享內存段
- 16. CUDA共享內存
- 17. RDMA內存共享
- 18. 共享內存 - 需要同步
- 19. 與信號量共享內存同步
- 20. 高效的多線程共享訪問內存緩衝區
- 21. Windows上的共享內存訪問權限
- 22. 父進程無法訪問PyQt中的共享內存
- 23. 無法訪問在子進程中創建的共享內存
- 24. 訪問共享內存中的結構成員「in C」
- 25. MPI:確保獨佔訪問共享內存(RMA)
- 26. C多進程訪問共享內存互斥鎖
- 27. CUDA的MEMCHECK未出界的報告共享內存訪問
- 28. 共享庫無法訪問程序的內存
- 29. 無法訪問PHP/C++共享內存在網上
- 30. 訪問共享內存中的數據C++ POSIX
可以使用互斥信號來避免這種情況嗎? 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