private void ReturnInstance(PoolObjectInstance instance) { var current = _pool; instance.Next = current; if (Interlocked.CompareExchange(ref _pool, instance, current) != current) { SpinWaitReturn(instance); } }
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); }