initial import
This commit is contained in:
24
core/syncx/spinlock.go
Normal file
24
core/syncx/spinlock.go
Normal file
@@ -0,0 +1,24 @@
|
||||
package syncx
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type SpinLock struct {
|
||||
lock uint32
|
||||
}
|
||||
|
||||
func (sl *SpinLock) Lock() {
|
||||
for !sl.TryLock() {
|
||||
runtime.Gosched()
|
||||
}
|
||||
}
|
||||
|
||||
func (sl *SpinLock) TryLock() bool {
|
||||
return atomic.CompareAndSwapUint32(&sl.lock, 0, 1)
|
||||
}
|
||||
|
||||
func (sl *SpinLock) Unlock() {
|
||||
atomic.StoreUint32(&sl.lock, 0)
|
||||
}
|
||||
Reference in New Issue
Block a user