mirror of
https://github.com/status-im/status-go.git
synced 2025-01-11 07:07:24 +00:00
25 lines
457 B
Go
25 lines
457 B
Go
package client
|
|
|
|
import (
|
|
"sync/atomic"
|
|
)
|
|
|
|
// TryLock implement the classic "try-lock" operation.
|
|
type TryLock struct {
|
|
n int32
|
|
}
|
|
|
|
// Lock tries to lock the try-lock. If successful, it returns true.
|
|
// Otherwise, it returns false immedidately.
|
|
func (c *TryLock) Lock() error {
|
|
if !atomic.CompareAndSwapInt32(&c.n, 0, 1) {
|
|
return errDoubleLock
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Unlock unlocks the try-lock.
|
|
func (c *TryLock) Unlock() {
|
|
atomic.StoreInt32(&c.n, 0)
|
|
}
|