簡體   English   中英

C#數組中的線程安全性

[英]Thread safety in C# arrays

有2個不同的線程:

  • 一個從C#數組讀取(例如從第一個位置讀取),
  • 另一個寫入相同的C#數組但寫入不同的位置(例如到最后一個位置)

線程安全與否?
(我的意思是這里沒有鎖定閱讀或寫作)

這個特例是安全的,是的。

讀取和寫入數組的不同部分不會干擾其他操作。

但是,根據元素的類型和元素的大小,讀取和寫入相同的位置可能會給您帶來問題。

我不確定這是否安全。 想象一下你有byte []。 那些字節緊密堆積在內存中。 現在,如果修改這些字節,編譯器可能會合並一些寫操作以執行字(32位)大小的讀取修改寫操作。 在某些CPU上,例如ARM,這是編譯器唯一的內存修改指令。 如果您一次修改多個字節,這尤其方便。 CPU也可以做同樣的事情。 它也可以在你不知道的情況下重新排序。 面對這種優化,讀取相鄰存儲器的線程可能會看到部分修改。 您通常不會看到這種效果,因為堆分配器對您很好,並且始終為您提供至少字對齊的內存。

長話短說:是的。 只要它到兩個不同的位置,它就是一個安全的操作。

前一段時間有一個關於這個問題的討論 ,如果你很好奇,它會提供一些有用的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM