为了防止死锁,我给我的程序按照顺序加锁了。比如oa--as---aa这种顺序。但是由于在获取OA的时候发现数据不存在,所以我就先new,然后加锁。结果就成了new oa----锁oa----new as-----锁as----new aa----锁aa。但是这样下去,会发生死锁,这是什么原因了。(oa和as锁采用的是排它锁,aa采用的是共享锁)
我这边是通过加MySQL行级锁,for update和in share mode这种方式来的,没有锁到同一个变量。
为了防止死锁,我给我的程序按照顺序加锁了。比如oa--as---aa这种顺序。但是由于在获取OA的时候发现数据不存在,所以我就先new,然后加锁。结果就成了new oa----锁oa----new as-----锁as----new aa----锁aa。但是这样下去,会发生死锁,这是什么原因了。(oa和as锁采用的是排它锁,aa采用的是共享锁)
我这边是通过加MySQL行级锁,for update和in share mode这种方式来的,没有锁到同一个变量。
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
2 回答2.8k 阅读✓ 已解决
锁有没有嵌套?是不是锁到同一个变量了?
是不是在第二步就死锁了?