| 123456789101112131415161718192021222324 |
- package base
- import (
- "runtime"
- "sync"
- "sync/atomic"
- )
- type spinLock uint32
- func (sl *spinLock) Lock() {
- for !atomic.CompareAndSwapUint32((*uint32)(sl), 0, 1) {
- runtime.Gosched()
- }
- }
- func (sl *spinLock) Unlock() {
- atomic.StoreUint32((*uint32)(sl), 0)
- }
- func NewSpinLock() sync.Locker {
- var lock spinLock
- return &lock
- }
|