Exemplo n.º 1
0
        void WithAtomicValUnmanaged_Entry()
        {
            for (var i = 0; i < NumIterations; i++)
            {
                var prevVal = _atomicValUnmanaged.Exchange(new Vector2(i, i)).PreviousValue;
                var curVal  = _atomicValUnmanaged.TryExchange(new Vector2(prevVal.X + 2, prevVal.Y + 2), new Vector2(i, i)).CurrentValue;

                BenchmarkUtils.SimulateContention(ContentionLevel);

                prevVal = _atomicValUnmanaged.Exchange(new Vector2(curVal.X + 1, curVal.Y + 1)).PreviousValue;
                curVal  = _atomicValUnmanaged.TryExchange(new Vector2(prevVal.X + 2, prevVal.Y + 2), new Vector2(i, i)).CurrentValue;

                BenchmarkUtils.SimulateContention(ContentionLevel);

                prevVal = _atomicValUnmanaged.Exchange(new Vector2(curVal.X + 1, curVal.Y + 1)).PreviousValue;
                _atomicValUnmanaged.TryExchange(new Vector2(prevVal.X + 2, prevVal.Y + 2), new Vector2(i, i));

                BenchmarkUtils.SimulateContention(ContentionLevel);
            }
        }
Exemplo n.º 2
0
        void WithUnmanagedInt_Entry()
        {
            const int Bitmask = 0b101010101;

            for (var i = 0; i < NumIterations; ++i)
            {
                var incResult = _unmanagedInt.Exchange(curVal => curVal + 1);
                Assert(incResult.CurrentValue == incResult.PreviousValue + 1);
                var addResult = _unmanagedInt.Exchange(curVal => curVal + 10);
                Assert(addResult.CurrentValue == addResult.PreviousValue + 10);
                var subResult = _unmanagedInt.Exchange(curVal => curVal - 9);
                Assert(subResult.CurrentValue == subResult.PreviousValue - 9);
                var multResult = _unmanagedInt.Exchange(curVal => curVal * 3);
                Assert(multResult.CurrentValue == multResult.PreviousValue * 3);
                var divResult = _unmanagedInt.Exchange(curVal => curVal / 4);
                Assert(divResult.CurrentValue == divResult.PreviousValue / 4);
                var decResult = _unmanagedInt.Exchange(curVal => curVal - 1);
                Assert(decResult.CurrentValue == decResult.PreviousValue - 1);
                var exchangeResult = _unmanagedInt.Exchange(curVal => curVal & Bitmask);
                Assert(exchangeResult.CurrentValue == (exchangeResult.PreviousValue & Bitmask));
            }
        }