我需要一个包含易失性元素的数组,但是找不到实现的方法。
private volatile T[] _arr;
这意味着_arr引用是易变的,但它并不能保证_arr对象内部的任何项目。
有没有办法将_arr的项目标记为易变?
谢谢。
编辑:
根据binarycoder的答案构建了以下代码。这段代码是否线程安全?
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; }
}
}
long
或double
时,它不是线程安全的,因为这些都是64位值,您必须使用Volatile.Read()
和Volatile.Write()
或类似方法来读取和写入它们,否则读取和写入不能保证是原子性的。 - Evgeniy Berezovsky