本题是哈希表上的接口模拟。用一张映射 fileId -> ownerId 表示「当前谁锁着这份文件」即可。
lock:键已存在则失败;否则写入并返回成功。注意:同一 ownerId 再锁同一文件也要失败(不可重入)。unlock:仅当键存在且值等于 ownerId 时删除并成功;未锁或持有者不匹配都失败且不改表。holder:键不存在返回 -1,否则返回持有者。lockedCount:映射大小。配置中心不允许两名运维同时改同一份配置文件。请实现一个文件编辑锁看板:每份文件同一时刻最多被一个持有者锁住;锁不是可重入的(同一持有者对已锁文件再次 lock 也失败)。
请实现类 FileLockBoard:
FileLockBoard():创建空看板,没有任何文件被锁。lock(fileId, ownerId):尝试为 ownerId 锁住 fileId。
trueownerId),不加锁,返回 falseunlock(fileId, ownerId):尝试由 ownerId 解开 fileId。
ownerId 持有,则解锁并返回 trueownerId)不改状态,返回 falseholder(fileId):查询 fileId 的当前持有者。已锁则返回其 ownerId,未锁返回 -1lockedCount():返回当前处于锁定状态的文件个数以上操作都是立即生效的;不存在超时自动解锁。
每行一次调用。首行必须是 FileLockBoard()。累计调用不超过 10000 次。
每次调用输出一行:
nulllock / unlock 返回 true 或 falseholder / lockedCount 返回整数输入:
FileLockBoard()
lock(1, 10)
lock(1, 20)
holder(1)
unlock(1, 20)
unlock(1, 10)
holder(1)
lockedCount()
输出:
null
true
false
10
false
true
-1
0
说明:
lock(1,10) 成功,文件 1 由 10 持有lock(1,20) 失败,因为已被锁;holder(1) 仍为 10unlock(1,20) 失败(持有者不是 20)unlock(1,10) 成功后文件空闲,holder 为 -1,lockedCount 为 0输入:
FileLockBoard()
lock(3, 1)
lock(3, 1)
lock(4, 1)
lockedCount()
holder(4)
unlock(4, 1)
lockedCount()
输出:
null
true
false
true
2
1
true
1
说明:同一持有者对同一文件再次 lock 仍失败(不可重入)。1 可以同时持有不同文件 3 和 4。
输入:
FileLockBoard()
unlock(9, 1)
holder(9)
lock(9, 2)
lock(8, 2)
lockedCount()
输出:
null
false
-1
true
true
2
说明:对从未加锁的文件 unlock 失败;holder 返回 -1。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册