Thread safety in C# arrays

后端 未结 3 820
隐瞒了意图╮
隐瞒了意图╮ 2020-12-17 17:01

Does having 2 different threads :

  • one reading from a C# array (e.g from first location),
  • and another one writing to the same C# array but t
3条回答
  •  盖世英雄少女心
    2020-12-17 17:57

    I'm not sure this is guaranteed to be safe. Imagine you have byte[]. Those bytes are closely packed in memory. Now, if you modify those bytes the compiler may coalesce some of the writes to perform word (32-bit) sized read modify write operations. On some CPUs, ARM for example, this is the only kind of memory modifying instruction the compiler has. This is especially handy if you are modifying more than one byte at a time. The CPU can do the same thing too. It can also reorder stuff without you knowing about it. In the face of that kind of optimization it is possible for a thread reading adjacent memory to see partial modifications. You don't see this kind of effect normally because the heap allocator is nice to you and always gives you memory which is at least word aligned.

提交回复
热议问题