init: 1.0.0
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user