数据库死锁主要是由数据库阻塞引起的吗?换句话说是阻止僵局的内在原因?多次阻塞资源是否是死锁的必要条件?如果在数据库中阻止阻止,那意味着我们可以避免数据库死锁吗?
检查了互联网上的不同资源并得出了相互矛盾的答案:
http://docs.oracle.com/cd/E17277_02/html/TransactionGettingStarted/blocking_deadlocks.html
从上述资源中,答案表示以下摘录
当两个或多个控制线程被阻塞时发生死锁, 每个等待其他线程持有的资源。当这个 碰巧,线程不可能向前发展 除非一些外部代理人采取行动打破僵局。
http://publib.boulder.ibm.com/tividd/td/BSM/SC32-9084-00/en_US/HTML/bsmd240.htm
从上述资源中,答案表示以下摘录
阻止与死锁不同。死锁是一个条件 当两个用户或会话对单独的对象具有锁定时发生 每个进程都试图获取另一个对象的锁定 过程有。 SQL Server会自动检测并解析 死锁。如果遇到死锁,则其中一个进程是 终止,允许其他进程继续。
答案 0 :(得分:1)
我不认为这两个片段是冲突的。两者都具体,因为两个(或更多)进程/线程中的每一个都有另一个需要的资源。
阻塞和死锁不一样,但是由于阻塞会发生死锁 - 但这只是因为两个进程中的每一个都阻塞了对其他资源的请求。
所以 - 由于阻塞而发生死锁,但阻塞不会自动导致死锁。
答案 1 :(得分:0)
将读/写不一致视为一种疾病,阻断该疾病的药物和作为药物副作用的死锁。