采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
这边老师使用了Thread Id来去在解锁的时候自己判断一下是否是自己,否则别删除,但是我想这似乎依然不能解决两个线程同时操作的问题,假如Thread A获取到了锁,然后由于GC停顿或者是等待长时间的IO,在未执行任何任务之前停止运行,导致失去了锁,Thread B获取到了锁,开始执行自己临界区的任务,此时A停顿结束,开始也执行自己的任务,这样也会导致临界区被同时执行,这样的情况如何去处理
看的很仔细,这个得一个一个解决比如提到的锁的过期问题,在Redisson里面有一个watch dog的机制就是专门给锁“续命”的,至于你说到的gc,就是比如redis内存满了吧,那么这情况只能通过监控提醒了
是这样,假如A线程获取了锁,但是这个时候A所在的虚拟机发生了很长时间的无响应,没有人续命,可能是长时间的STW,这样的话A刚获取锁之后发生了上面描述的情况,锁超时之后B进程获取了锁,但是B获取锁之后,A进程恢复了,然后A以为自己依然获取了锁,执行临界区代码,这种情况怎么避免呢
这种情况下没法避免呢,这个情况如果不续命应该属于比较极端的了吧,你是目前遇到这种情况了吗
没有,只是想到的。
登录后可查看更多问答,登录/注册
以项目整合Redis各种场景,从此轻松应对各类Redis难题
1.2k 11
2.2k 9
1.0k 8
742 7
1.0k 7