Are C# arrays thread safe?

I believe that if each thread only works on a separate part of the array, all will be well. If you’re going to share data (i. e. communicate it between threads) then you’ll need some sort of memory barrier to avoid memory model issues.

I believe that if you spawn a bunch of threads, each of which populates its own section of the array, then wait for all of those threads to finish using Thread.Join, that that will do enough in terms of barriers for you to be safe. I don’t have any supporting documentation for that at the moment, mind you …

EDIT: Your sample code is safe. At no time are two threads accessing the same element – it’s as if they each have separate variables. However, that doesn’t tend to be useful on its own. At some point normally the threads will want to share state – one thread will want to read what another has written. Otherwise there’s no point in them writing into a shared array instead of into their own private variables. That’s the point at which you need to be careful – the coordination between threads.

Leave a Comment