/// <summary>
        /// Creates a new <see cref="AtomicReferenceArray{T}"/> of <paramref name="length"/>.
        /// </summary>
        /// <param name="length">
        /// the length of the array
        /// </param>
        public AtomicArray(int length)
        {
            ValueHolder <T> holder = new ValueHolder <T>();

            ValueHolder <T>[] holders = new ValueHolder <T> [length];
            for (int i = 0; i < length; i++)
            {
                holders[i] = holder;
            }
            _atomicReferenceArray = new AtomicReferenceArray <ValueHolder <T> >(holders);
        }
        /// <summary>
        /// Creates a new <see cref="AtomicReferenceArray{T}"/> with the same length as, and
        /// all elements copied from <paramref name="array"/>
        /// </summary>
        /// <param name="array">
        /// The array to copy elements from
        /// </param>
        /// <throws><see cref="ArgumentNullException"/>if array is null</throws>
        public AtomicArray(T[] array)
        {
            if (array == null)
            {
                throw new ArgumentNullException("array");
            }
            int length = array.Length;

            ValueHolder <T>[] holders = new ValueHolder <T> [length];
            for (int i = 0; i < length; i++)
            {
                holders[i] = new ValueHolder <T>(array[i]);
            }
            _atomicReferenceArray = new AtomicReferenceArray <ValueHolder <T> >(holders);
        }
 /// <summary>
 /// Eventually sets to the given value at the given <paramref name="index"/>
 /// </summary>
 /// <param name="newValue">
 /// the new value
 /// </param>
 /// <param name="index">
 /// the index to set
 /// </param>
 public virtual void LazySet(int index, T newValue)
 {
     _atomicReferenceArray[index] = new ValueHolder <T>(newValue);
 }
 /// <summary>
 /// Indexer for getting and setting the current value at position <paramref name="index"/>.
 /// <p/>
 /// </summary>
 /// <param name="index">
 /// The index to use.
 /// </param>
 public override T this[int index] {
     get { return(_atomicReferenceArray[index].Value); }
     set { _atomicReferenceArray[index] = new ValueHolder <T>(value); }
 }