还是我对携程锁的理解有问题- -
版本7.2
如上图测试测试代码 TestRun1 里面进行死锁 TestRun2 永远等不到解锁 一直 coroutine is timeout!
7.2中 测试结果 TestRun1->超时->TestRun2->coroutine is timeout!
版本6.0中 TestRun1 超时了 抛异常或过滤掉 直接调用下一个锁 TestRun2 正常执行 6.0中 测试结果 TestRun1->超时->TestRun2->正常执行
ET6 模拟 结果
ET7.2 模拟 结果
没啥问题吧,第一个直接获得了锁,一直不释放锁。第二个一直在等,等不到所以超时
egametang 为啥6.0 却可以跳过当前类型超时的锁 去执行下一个锁
影子- 我咋觉得不太可能呢,这个1协程显然不会退出,你在1中加日志看看,即使跳过了,1的协程也没退出
ET6我不太记得了,有可能是这样,每个wait我只等这么久,超时了我就直接获得锁了。7是超时了就抛异常
egametang 对 确实不会退出 只是跳过而已
为什么7.2要扔掉这个机制?
跳过干啥,有可能那是一个重要消息,跳过导致后面产生蝴蝶效应。根本解决方法是不要写出死循环的协程