public void AddValue(int value)
{
int initial;
int newIndex;
do
{
initial = index;
newIndex = (initial + 1) % dataLength;
}
while (Interlocked.CompareExchange(ref index, newIndex, initial) != initial);
data[initial] = value;
Interlocked.Increment( ref length );
}