public void ShouldNotReturnNextClaimSequenceUntilBufferHasReserve() { var dependentSequence = new Sequence(Sequencer.InitialCursorValue); Sequence[] dependentSequences = { dependentSequence }; _claimStrategy.SetSequence(_claimStrategy.BufferSize - 1L, dependentSequences); var done = new Volatile4.Boolean(false); var beforeLatch = new ManualResetEvent(false); var afterLatch = new ManualResetEvent(false); new Thread( () => { beforeLatch.Set(); Assert.AreEqual(_claimStrategy.BufferSize, _claimStrategy.IncrementAndGet(dependentSequences)); done.WriteFullFence(true); afterLatch.Set(); }).Start(); beforeLatch.WaitOne(); Thread.Sleep(100); Assert.IsFalse(done.ReadFullFence()); dependentSequence.Value = (dependentSequence.Value + 1L); afterLatch.WaitOne(); Assert.AreEqual(_claimStrategy.BufferSize, _claimStrategy.Sequence); }
public void ShouldNotReturnNextClaimSequenceUntilBufferHasReserve() { var dependentSequence = new Sequence(Sequencer.InitialCursorValue); var dependentSequences = new[] { dependentSequence }; _claimStrategy.SetSequence(BufferSize - 1L, dependentSequences); var done = new Volatile4.Boolean(false); var beforeLatch = new ManualResetEvent(false); var afterLatch = new ManualResetEvent(false); new Thread(() => { beforeLatch.Set(); Assert.AreEqual(_claimStrategy.BufferSize, _claimStrategy.IncrementAndGet(dependentSequences)); done.WriteFullFence(true); afterLatch.Set(); }).Start(); beforeLatch.WaitOne(); Thread.Sleep(1000); Assert.IsFalse(done.ReadFullFence()); dependentSequence.Value = dependentSequence.Value + 1L; afterLatch.WaitOne(); Assert.AreEqual(_claimStrategy.BufferSize, _claimStrategy.Sequence); }
public void SetUp() { _volatile = new Volatile4.Boolean(InitialValue); }