2015-11-01 163 views
0

多核或多CPU機器上的多個線程試圖同時訪問堆內存中的同一區域(只讀 - 無變異)時會發生什麼?例如,試圖調用一個靜態方法(該方法不會改變任何東西)。試圖調用靜態方法的行爲是否可能會導致競爭或死鎖狀況?多線程堆內存訪問

編輯:多線程在同一時間只讀內存訪問會導致競爭條件(或任何其他問題)?

+0

該方法突變什麼? – dm03514

+0

這個問題太廣泛了。答案是肯定的,它可能會造成競爭條件。這真的取決於該方法在做什麼。 – Robinson

回答

1

不,多線程讀數沒有問題。

只有在任何線程嘗試寫入時纔有可能出現競爭條件。即使在這種情況下,它可以正常工作 - 這取決於很多其他的東西(CPU拱門,寫入類型等)

1

支持多個核心的每個平臺,你可能會用於可預見的未來將支持某些版本的MESI,保持核心的內存視圖一致。在另一個內核上讀取內容後,在另一個內核上讀取的內存將被讀取的所有內核共享,直到內核寫入內核(此時它將在寫入內核的內核上是獨佔的,並且無效在其他人)或它被推出緩存。

通過讀取未被修改的內存,不能導致競爭條件。這是除非代碼被修改之外,您不能在代碼本身出現競爭條件的原因之一。