public bool Dequeue(out T entry)
        {
            if (_buffer.TryAcquireSingle(out RingItem <T> item))
            {
                entry = item.Item;

                _buffer.Release();
                return(true);
            }

            entry = default(T);
            return(false);
        }
示例#2
0
        public void RingBuffer_MultipleItemsSingleAcquirePush()
        {
            var rb = new SingleConsumerRingBuffer <long>(4);

            long item = 910;

            Assert.True(rb.TryPush(ref item));
            item = 911;
            Assert.True(rb.TryPush(ref item));

            RingItem <long> ringItem;

            Assert.True(rb.TryAcquireSingle(out ringItem));
            Assert.Equal(910, ringItem.Item);
            Assert.True(rb.TryAcquireSingle(out ringItem));
            Assert.Equal(911, ringItem.Item);

            item = 912;
            Assert.True(rb.TryPush(ref item));
            Assert.True(rb.TryPush(ref item));
            Assert.False(rb.TryPush(ref item));

            rb.Release();

            item = 913;
            Assert.True(rb.TryPush(ref item));

            Assert.True(rb.TryAcquireSingle(out ringItem));
            Assert.Equal(912, ringItem.Item);
            Assert.True(rb.TryAcquireSingle(out ringItem));
            Assert.Equal(912, ringItem.Item);
            rb.Release();

            Assert.True(rb.TryAcquireSingle(out ringItem));
            Assert.Equal(913, ringItem.Item);
            rb.Release();
        }