27 lines
402 B
C#
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;
|
|
}
|
|
}
|
|
}
|