新增:trylock 尝试获取锁,并立即返回加锁结果

This commit is contained in:
2023-10-21 11:57:29 +08:00
parent 4fc7121b28
commit b80dc78cce
4 changed files with 36 additions and 18 deletions

View File

@@ -203,21 +203,21 @@ func messageHandler(v Message) {
}
Bus.shutdown()
}
case "lock":
case "lock", "trylock":
// lock key uuid 5
if len(rcmd) != 4 {
c.send("-Error: lock para number![" + strings.Join(rcmd, " ") + "]")
return
}
d, _ := strconv.Atoi(rcmd[3])
Bus._lock(&Lock{key: rcmd[1], uuid: rcmd[2], duration: d})
Bus._lock(&Lock{cmd: cmd, key: rcmd[1], uuid: rcmd[2], duration: d})
case "unlock":
// unlock key uuid
if len(rcmd) != 3 {
c.send("-Error: unlock para number![" + strings.Join(rcmd, " ") + "]")
return
}
Bus._unlock(Lock{key: rcmd[1], uuid: rcmd[2]})
Bus._unlock(Lock{cmd: cmd, key: rcmd[1], uuid: rcmd[2]})
default:
c.send("-Error: default not supported:[" + strings.Join(rcmd, " ") + "]")
return

View File

@@ -95,9 +95,10 @@ type ZConn struct { //ZConn
}
type Lock struct {
key string
uuid string
duration int
cmd string // lock|trylock|unlock
key string // lock key
uuid string // apply for unique identification
duration int // lock duration (seconds)
timer *time.Timer
start int64
//stop time.Time
@@ -432,7 +433,12 @@ func (s *ZBus) _lock(lock *Lock) {
}
}()
} else {
s.locks[lock.key] = append(locks, lock)
switch lock.cmd {
case "trylock": // send trylock fail message
s.broadcast("trylock", lock.uuid)
case "lock":
s.locks[lock.key] = append(locks, lock)
}
}
}
func (s *ZBus) _unlock(l Lock) {

View File

@@ -161,6 +161,7 @@ func (s *ZBus) loadLock() {
}
s._lock(&Lock{
cmd: "lock",
key: split[0],
uuid: split[1],
duration: duration,