Dot-Net
對 int 的並發讀取訪問數組:安全嗎?快嗎?
在四核機器上,我正在考慮 C#/.NET 算法的並行化,該算法涉及讓多個執行緒讀取小 int
$$ $$同時數組。到目前為止,它似乎工作得很好,但我不確定在哪裡指定數組上的並發讀取在 .NET 中是執行緒安全的。任何指針? 然後,我也想知道這種方法是否真的有效?在某些情況下,您最好為每個執行緒實際複製輸入數據,這樣就沒有任何並發讀取,並且每個數組(也許?)都有機會在關聯 CPU 附近記憶體?
關於多核 CPU 的最佳實踐有什麼想法嗎?
在您的情況下,對數組的並發讀取將是執行緒安全的。
至於您的算法有效性,取決於陣列的大小,如果它適合記憶體,那麼您可能會看到出色的性能提升,因為多核有效地“爭奪”CPU 中的記憶體。如果他們正在努力用相同的資訊填充記憶體,他們將共享意味著更多的記憶體命中和更好的性能。
假設您的陣列適合記憶體…
我認為並發讀取沒有問題。但是,如果存在並發寫入,則可能會出現問題。
不可變數據本質上是執行緒安全的。