package internal

import (
	"runtime"
	"sync/atomic"
)

type SpinLock struct {
	v int32
}

func (l *SpinLock) Unlock() {
	l.v = 0
}

func (l *SpinLock) Lock() {
	for {
		if l.v == 0 && atomic.CompareAndSwapInt32(&l.v, 0, 1) {
			return
		}
		// Nginx中考虑了多核的情况，Go中不考虑，因为可能是协程的切换。
		runtime.Gosched()
	}
}
