public ConcurrentRingBufferWriter(int bufferSize, IWaitStrategy waitStrategy) : base(waitStrategy) { _bufferSize = bufferSize; _nextFree = new Sequence(); _lastFree = new Sequence(bufferSize - 1); }
public long WaitFor(long position, Sequence sequence) { long current; while ((current = sequence.VolatileGet()) < position) { lock (_sync) { _waitingQueueSize++; current = sequence.VolatileGet(); if (position <= current) { _waitingQueueSize--; return current; } Monitor.Wait(_sync); _waitingQueueSize--; } } return current; }