-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
死锁,或者锁不是原子性 #24
Comments
我觉得这里的 error 可能会对人造成理解上的困难,我应该改一下 |
在您的测试代码中,我觉得应该把解锁代码删除掉,会比较客观,模拟业务一直运行,然后您可以看看另外一把锁会不会枷锁成功 // 注释
// defer fmt.Println("unlock ", id)
// defer lock.UnLock() |
代码进行了更改,TestLock函数调用的时候会一直持有锁不释放,但是还是打印lock两次,只开一个进程多重启几次,则会输出错误结果。
输出如下,锁没有释放,lock了两次
|
程序环境
redis环境
开200个协程,只要有超过一个lock打印就说明有问题
输出
|
您好,确实存在这样的问题,造成这样问题的原因是因为我当前代码自身实现了一个“可重入锁”,可重入锁自动生成的token是基于 Line 59 in eb3de25
|
开启两个协程调用同一个函数,进行分布式锁测试。
会出现两种预期之外的情况。
1.两个协程同时获得锁
代码如下
输出如下:
1.第一把锁还没解锁,锁了两次
2.只有一个协程能获得锁
The text was updated successfully, but these errors were encountered: