Dot-Net

對 int 的並發讀取訪問數組:安全嗎?快嗎?

  • April 19, 2018

在四核機器上,我正在考慮 C#/.NET 算法的並行化,該算法涉及讓多個執行緒讀取小 int

$$ $$同時數組。到目前為止,它似乎工作得很好,但我不確定在哪裡指定數組上的並發讀取在 .NET 中是執行緒安全的。任何指針? 然後,我也想知道這種方法是否真的有效?在某些情況下,您最好為每個執行緒實際複製輸入數據,這樣就沒有任何並發讀取,並且每個數組(也許?)都有機會在關聯 CPU 附近記憶體?

關於多核 CPU 的最佳實踐有什麼想法嗎?

在您的情況下,對數組的並發讀取將是執行緒安全的。

至於您的算法有效性,取決於陣列的大小,如果它適合記憶體,那麼您可能會看到出色的性能提升,因為多核有效地“爭奪”CPU 中的記憶體。如果他們正在努力用相同的資訊填充記憶體,他們將共享意味著更多的記憶體命中和更好的性能。

假設您的陣列適合記憶體…

我認為並發讀取沒有問題。但是,如果存在並發寫入,則可能會出現問題。

不可變數據本質上是執行緒安全的。

引用自:https://stackoverflow.com/questions/556367