12345678910111213141516171819202122232425262728 |
- package syncx
- import (
- "runtime"
- "sync/atomic"
- )
- // A SpinLock is used as a lock a fast execution.
- type SpinLock struct {
- lock uint32
- }
- // Lock locks the SpinLock.
- func (sl *SpinLock) Lock() {
- for !sl.TryLock() {
- runtime.Gosched()
- }
- }
- // TryLock tries to lock the SpinLock.
- func (sl *SpinLock) TryLock() bool {
- return atomic.CompareAndSwapUint32(&sl.lock, 0, 1)
- }
- // Unlock unlocks the SpinLock.
- func (sl *SpinLock) Unlock() {
- atomic.StoreUint32(&sl.lock, 0)
- }
|