Are C# arrays thread safe?
arrays, c#, multithreading, thread-safety
Solution
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.
Problem
In particular - Create a function to take an array and an index as parameters. - Create a n element array. - Create a n count loop. - Inside the loop on a new thread assign a new instance of the object to the array using the indexer passed in. I know how to manage the threads etc. I am interested in know if this is thread safe way of doing something. ``` class Program { // bogus object class SomeObject { private int value1; private int value2; public SomeObject(int value1, int value2) { this.value1 = value1; this.value2 = value2; } } static void Main(string[] args) { var s = new SomeObject[10]; var threads = Environment.ProcessorCount - 1; var stp = new SmartThreadPool(1000, threads, threads); for (var i = 0; i < 10; i++) { stp.QueueWorkItem(CreateElement, s, i); } } static void CreateElement(SomeObject[] s, int index) { s[index] = new SomeObject(index, 2); } } ```