数据库死锁主要是由数据库阻塞造成的吗?换句话说,阻塞是否是死锁的内在原因?多个资源阻塞是否是死锁的必要条件?如果在数据库中防止阻塞,这是否意味着我们可以避免数据库死锁?
检查了来自互联网的不同资源,得到了相互矛盾的答案:
deadlocks.html
从上述资源来看,答案表明了以下摘录。
当两个或多个控制线程被阻塞时会发生死锁,每个线程都在等待另一个线程持有的资源。当发生这种情况时,除非某个外部代理采取行动来打破死锁,否则线程就不可能向前进。
US/HTML/bsmd240.htm
从上述资源来看,答案表明了以下摘录。
阻塞不同于死锁。死锁是当两个用户或会话在单独的对象上有锁而每个进程试图获得另一个进程所拥有的对象的锁时发生的一种情况。SQL服务器自动检测并解析死锁。如果遇到死锁,其中一个进程将被终止,从而允许另一个进程继续。
发布于 2013-11-25 07:49:50
我不认为这两段有冲突。这两者都是特定的,这是因为两个(或更多)进程/线程中的每一个都有另一个需要的资源。
阻塞和死锁是不一样的,但是死锁确实是由于阻塞而发生的--只是因为两个进程中的每一个都阻止了对方对资源的请求。
因此-由于阻塞而发生死锁,但阻塞不会自动导致死锁。
发布于 2013-11-26 11:39:35
将读/写不一致视为一种疾病,将阻塞视为治疗该疾病的药物,将死锁视为药物的副作用。
https://stackoverflow.com/questions/20186867
复制相似问题