Files
Recyclable.Collections/Recyclable.Collections/Parallel/SpinLockSlimmer.cs
T

27 lines
402 B
C#

namespace Recyclable.Collections.Parallel
{
public struct SpinLockSlimmer
{
private volatile int _locked;
public void Enter()
{
if (Interlocked.CompareExchange(ref _locked, 1, 0) == 0)
{
return;
}
SpinWait waiter = new();
while (Interlocked.CompareExchange(ref _locked, 1, 0) == 1)
{
waiter.SpinOnce();
}
}
public void Exit()
{
_locked = 0;
}
}
}