Exemplo n.º 1
0
        private void ReturnInstance(PoolObjectInstance instance)
        {
            var current = _pool;

            instance.Next = current;

            if (Interlocked.CompareExchange(ref _pool, instance, current) != current)
            {
                SpinWaitReturn(instance);
            }
        }
Exemplo n.º 2
0
        private void SpinWaitReturn(PoolObjectInstance instance)
        {
            var spin = new SpinWait();

            PoolObjectInstance current;

            do
            {
                spin.SpinOnce();

                current = _pool;

                instance.Next = current;
            } while (Interlocked.CompareExchange(ref _pool, instance, current) != current);
        }