V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
noble4cc
V2EX  ›  问与答

分布式锁 使用看门狗机制 如果任务线程异常退出怎么保证锁会被释放呢

  •  
  •   noble4cc · 2023-03-22 11:29:09 +08:00 · 916 次点击
    这是一个创建于 644 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看门狗会自动给锁续期 如果任务线程异常退出了 没有手工释放锁 这样不就无限续期了吗
    orange2023
        1
    orange2023  
       2023-03-22 14:14:53 +08:00
    任务线程异常退出了,那对应的 thread 就没有了呀,watch dog 也不会续期了
    orange2023
        2
    orange2023  
       2023-03-22 14:23:59 +08:00
    @orange2023 如果你指的是 Redission 的话,watch dog 只是对于 Redisson instance 而言的,你需要自己处理代码中的异常行为。既任务线程出现异常,应该手动释放锁。
    noble4cc
        3
    noble4cc  
    OP
       2023-03-22 14:48:47 +08:00
    @orange2023 是的 现在也是这么做的
    我的疑问 Redisson 看门狗这种 如果任务线程异常退出 Redisson 的守护线程也会停止续期吗 目前看了下源码没找到
    orange2023
        4
    orange2023  
       2023-03-22 15:40:30 +08:00
    @noble4cc google 了一下,Redisson 的守护线程不会停止续期。
    想了一下,”任务线程异常退出,设法让 watch dog 感知“,可以加入心跳检测机制(或者语言本身可以获取特定线程的状态)。那么多长的“心跳”间隔算过期这件事,又是一个类似”加一个 30S 锁之后,解锁时可能任务还没执行完,加入 watch dog 自动续期”的问题。
    noble4cc
        5
    noble4cc  
    OP
       2023-03-22 16:29:13 +08:00
    @orange2023 是的 我看了下源码 入参就一个线程 ID 内部也没判断线程是否存活之类的
    网上也有类似的提问 解答一般是如果线程不存在了 进程一般也不存在了 就不会续期到时候就直接过期了
    如果要实现完美些看来得再加个守护线程 监控这些工作线程的状态 如果发现不存活 直接上释放锁 不过这又增加了系统设计复杂度 感觉也没什么必要
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2436 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:03 · PVG 00:03 · LAX 08:03 · JFK 11:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.