Exemple #1
0
    /// <summary>
    ///     Removes an item from the buffer.
    /// </summary>
    /// <returns>The next available item</returns>
    public T Dequeue()
    {
        var next = _consumerCursor.ReadFullFence() + 1;

        while (_producerCursor.ReadFullFence() < next)
        {
            Thread.SpinWait(1);
        }
        var result = this[next];

        _consumerCursor.WriteFullFence(next);
        return(result);
    }
Exemple #2
0
        public void OnNext(MessageEvent _event, long sequence, bool endOfBatch)
        {
            //_value.WriteUnfenced(_operation.Op(_value.ReadUnfenced(), _event.Value));
            _value.WriteFullFence(_operation.Op(_value.ReadFullFence(), _event.Value));

            //Console.WriteLine("ValueMutationEventHandler::Run() -- Event.Value: {0}", _event.Value);

            if (sequence >= _max_sequence - 1)
            {
                Console.WriteLine("ValueMutationEventHandler::Run() -- Thread: {0} done.", _id);
                this._latch.Signal();
            }
        }
Exemple #3
0
 public void ReadFullFenceReturnsInitialValue()
 {
     Assert.AreEqual(InitialValue, _volatile.ReadFullFence());
 }