public void OnNext(FunctionEvent data, long sequence, bool endOfBatch)
        {
            switch (_functionStep)
            {
            case FunctionStep.One:
                data.StepOneResult = data.OperandOne + data.OperandTwo;
                break;

            case FunctionStep.Two:
                data.StepTwoResult = data.StepOneResult + 3L;
                break;

            case FunctionStep.Three:
                if ((data.StepTwoResult & 4L) == 4L)
                {
                    _stepThreeCounter.WriteUnfenced(_stepThreeCounter.ReadUnfenced() + 1);
                }
                break;
            }

            if (sequence == _iterations - 1)
            {
                _mru.Set();
            }
        }
Exemple #2
0
        public void OnNext(ValueEvent value, long sequence, bool endOfBatch)
        {
            _value.WriteUnfenced(_value.ReadUnfenced() + value.Value);

            if (sequence == _iterations - 1)
            {
                _mru.Set();
            }
        }
        public void OnNext(ValueEvent data, long sequence, bool endOfBatch)
        {
            _value.WriteUnfenced(_operation.Op(_value.ReadUnfenced(), data.Value));

            if (sequence == _iterations - 1)
            {
                _latch.Signal();
            }
        }
Exemple #4
0
    /// <summary>
    ///     Add an item to the buffer
    /// </summary>
    /// <param name="item"></param>
    public void Enqueue(T item)
    {
        var next = _producerCursor.ReadFullFence() + 1;

        var wrapPoint = next - _entries.Length;
        var min       = _consumerCursor.ReadFullFence();

        while (wrapPoint > min)
        {
            min = _consumerCursor.ReadFullFence();
            Thread.SpinWait(1);
        }

        this[next] = item;
        _producerCursor.WriteUnfenced(next);
    }
        public void OnNext(FizzBuzzEvent data, long sequence, bool endOfBatch)
        {
            switch (_fizzBuzzStep)
            {
            case FizzBuzzStep.Fizz:
                data.Fizz = (data.Value % 3) == 0;
                break;

            case FizzBuzzStep.Buzz:
                data.Buzz = (data.Value % 5) == 0;
                break;

            case FizzBuzzStep.FizzBuzz:
                if (data.Fizz && data.Buzz)
                {
                    _fizzBuzzCounter.WriteUnfenced(_fizzBuzzCounter.ReadUnfenced() + 1);
                }
                break;
            }
            if (sequence == _iterations - 1)
            {
                _mru.Set();
            }
        }
Exemple #6
0
 public void Reset()
 {
     _value.WriteUnfenced(0);
     _counter = 0;
 }
Exemple #7
0
 public void Reset()
 {
     _value.WriteUnfenced(0);
 }
Exemple #8
0
 public void WriteUnfencedInitialValue()
 {
     _volatile.WriteUnfenced(NewValue);
     Assert.AreEqual(NewValue, _volatile.ReadUnfenced());
 }