C# volatile array items?
.net, arrays, c#, multithreading, volatile
Solution
Since it is possible to pass array elements by reference, you can use `Thread.VolatileRead` and `Thread.VolatileWrite`.
It is useful to understand that the `volatile` keyword works behind the scenes by using `Thread.MemoryBarrier`. You could write:
// Read
x = _arr[i];
Thread.MemoryBarrier();
// Write
Thread.MemoryBarrier();
_arr[i] = x;
Note that `volatile` and `MemoryBarrier` are advanced techniques that are both easy to get wrong. For example, see How do I Understand Read Memory Barriers and Volatile. Usually you are better off with higher level constructs such as `lock`, `Monitor`, `ReaderWriterLockSlim`, and others.
Problem
I need an array with volatile items, and can't find a way to do that. ``` private volatile T[] _arr; ``` This means that the _arr reference is volatile, however it does not guarantee anything about the items inside the _arr object itself. Is there any way to mark the _arr's Items as volatile? Thanks. EDIT: The following code built according to binarycoder's answer. Is this code thread-safe to use? ``` public class VolatileArray<T> { private T[] _arr; public VolatileArray(int length) { _arr = new T[length]; } public VolatileArray(T[] arr) { _arr = arr; } public T this[int index] { get { T value = _arr[index]; Thread.MemoryBarrier(); return value; } set { Thread.MemoryBarrier(); _arr[index] = value; } } public int Length { get { return _arr.Length; } } } ```