2012-03-29 127 views
0

是否有任何規則可以在多核中同時訪問共享內存? 如果一個內核正在編寫共享內存,另一個內核正在同一時間讀取相同的內存,是否有任何問題? 應該避免這種情況?Multicores:同時訪問共享內存

回答

0

這被稱爲競態條件,這樣的代碼的結果將是不可預知的。你必須避免它。你可以:

  • 改變要使用的算法不同的存儲器,或通過使用原子操作
  • 同步訪問,或通過使用更高級別的同步構造,如臨界區或互斥
  • 同步訪問。

正如@DanDan所說,只有從多個線程讀取並不是問題。

+0

可以使用互斥信號來避免這種情況嗎? E.G .:一個核心,如果(!LOCK)LOCK = TRUE;另一個核心如果(!LOCK)LOCK = TRUE,並且LOCK在兩個CORES之間共享。當一個核心執行LOCK = TRUE時,另一個核心恰好在同時執行if(!LOCK),是否可以這麼做? – shikun 2012-03-30 03:35:11

+0

不,這也是布爾變量的爭用條件。您必須使用適當的互斥對象(無論您的語言/操作系統是什麼意思)。 – 2012-03-30 07:15:10

0

是的,你需要避免這種情況。只有在沒有副作用的情況下才能同時讀取多核和多線程可以安全執行的操作。

+0

可以使用互斥信號來避免這種情況嗎? E.G .:一個核心,如果(!LOCK)LOCK = TRUE;另一個核心如果(!LOCK)LOCK = TRUE,並且LOCK在兩個CORES之間共享。當一個核心執行LOCK = TRUE時,另一個核心恰好在同時執行if(!LOCK),是否可以這麼做? – shikun 2012-03-30 07:52:39

+0

如果板上沒有操作系統會怎麼樣,我們是否應該使用IRQ來避免內核同時訪問?有關於此的任何其他建議? – shikun 2012-03-30 08:10:55