mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-10-01 01:36:09 -04:00
26 lines
712 B
Go
26 lines
712 B
Go
|
package nodelock
|
||
|
|
||
|
import "sync"
|
||
|
|
||
|
// Lock locks the node once there the join or the init is at a point
|
||
|
// where there is no turning back and the other operation does not need
|
||
|
// to continue.
|
||
|
//
|
||
|
// This can be viewed as a state machine with two states: unlocked and locked.
|
||
|
// There is no way to unlock, so the state changes only once from unlock to
|
||
|
// locked.
|
||
|
type Lock struct {
|
||
|
mux *sync.Mutex
|
||
|
}
|
||
|
|
||
|
// New creates a new NodeLock, which is unlocked.
|
||
|
func New() *Lock {
|
||
|
return &Lock{mux: &sync.Mutex{}}
|
||
|
}
|
||
|
|
||
|
// TryLockOnce tries to lock the node. If the node is already locked, it
|
||
|
// returns false. If the node is unlocked, it locks it and returns true.
|
||
|
func (n *Lock) TryLockOnce() bool {
|
||
|
return n.mux.TryLock()
|
||
|
}
|