public void Reset_WithWaiters() { var autoResSlim = new AutoResetSuperSlimLock(false); int releasedCounter = 0; const int totalThreads = 5; for (int i = 0; i < totalThreads; i++) { new Thread(() => { autoResSlim.Wait(); Interlocked.Increment(ref releasedCounter); }) { IsBackground = true }.Start(); } Thread.Sleep(2000); autoResSlim.Waiters.Should().Be(totalThreads); autoResSlim.Reset(); Thread.Sleep(100); autoResSlim.Waiters.Should().Be(0); releasedCounter.Should().Be(totalThreads); autoResSlim.IsSet.Should().BeFalse(); }
public void StopAndBlockBuffers() { _state._resetApplied = true; _writeLock.Reset(); _readLock.Reset(); _state._readPosition = _state._readPositionCopy = 0; _state._writePosition = _state._writePositionCopy = 0; }
internal void Reset() { _state._resetApplied = true; _readLock.Reset(); _writeLock.Reset(); _state._readPosition = _state._readPositionCopy = 0; _state._writePosition = _state._writePositionCopy = 0; Thread.MemoryBarrier(); }