public void Add(int v) { lock (_lockObject) { _data.Add(v); } }
public void Add(int v) { _rwLock.EnterWriteLock(); try { _data.Add(v); } finally { _rwLock.ExitWriteLock(); } }
public void Add(int v) { while (true) { var local = Volatile.Read(ref _data); var copy = new CyclicArray(local); // Assume an initial parent thread creates this instance (so no null check on _data) copy.Add(v); if (Interlocked.CompareExchange(ref _data, copy, local) == local) { break; } } }