ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [deadlock]死锁解决方案!

[deadlock]死锁解决方案!

原创 Linux操作系统 作者:lzmliyi 时间:2013-07-31 07:19:44 0 删除 编辑
1. 所有事物以相同顺序更新表:
 
出现死锁的情况:
 
事物A
...
update tab_1 set ... where id = 1;
update tab_2 set ... where id = 1;
...
事物B
...
update tab_2 set ... where id = 1;
update tab_1 set ... where id = 1;
...
 
 
解决方案:
 
事物A
...
update tab_1 set ... where id = 1;
update tab_2 set ... where id = 1;
...
 
事物B
...
update tab_1 set ... where id = 1;
update tab_2 set ... where id = 1;
...
 
2. 按照一定的顺序对主表进行更新:
 
出现死锁的情况:
 
事物A
...
update tab_1 set qty = qty - 1 where id = 1;
update tab_2 set qty = qty - 1 where id = 1;
...
update tab_1 set qty = qty - 1 where id = 3;
update tab_2 set qty = qty - 1 where id = 3;
...
update tab_1 set qty = qty - 1 where id = 2;
update tab_2 set qty = qty - 1 where id = 2;
...
update tab_1 set qty = qty - 1 where id = 4;
update tab_2 set qty = qty - 1 where id = 4;
...
 
事物B
...
update tab_1 set qty = qty - 1 where id = 4;
update tab_2 set qty = qty - 1 where id = 4;
...
update tab_1 set qty = qty - 1 where id = 2;
update tab_2 set qty = qty - 1 where id = 2;
...
update tab_1 set qty = qty - 1 where id = 3;
update tab_2 set qty = qty - 1 where id = 3;
...
update tab_1 set qty = qty - 1 where id = 1;
update tab_2 set qty = qty - 1 where id = 1;
...
 
解决方案(按照id从小到大的顺序对主表进行更新):
 
事物A
...
update tab_1 set qty = qty - 1 where id = 1;
update tab_2 set qty = qty - 1 where id = 1;
...
update tab_1 set qty = qty - 1 where id = 2;
update tab_2 set qty = qty - 1 where id = 2;
...
update tab_1 set qty = qty - 1 where id = 3;
update tab_2 set qty = qty - 1 where id = 3;
...
update tab_1 set qty = qty - 1 where id = 4;
update tab_2 set qty = qty - 1 where id = 4;
...
 
事物B
...
update tab_1 set qty = qty - 1 where id = 1;
update tab_2 set qty = qty - 1 where id = 1;
...
update tab_1 set qty = qty - 1 where id = 2;
update tab_2 set qty = qty - 1 where id = 2;
...
update tab_1 set qty = qty - 1 where id = 3;
update tab_2 set qty = qty - 1 where id = 3;
...
update tab_1 set qty = qty - 1 where id = 4;
update tab_2 set qty = qty - 1 where id = 4;
...
 
总结:
第一种死锁情况比较容易发现和解决,第二种死锁情况要复杂一些!
 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26156924/viewspace-767508/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-08-10

  • 博文量
    6
  • 访问量
    7785