暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

死锁是怎么肥事

原创 肖雪松 2020-06-03
1442

这两天好几个开发的同事问我死锁的问题,我给他们讲了一下死锁和阻塞的关系和区别,然后给他们搜了一些写的不错的博客,确实,这个该写的别人差不多都写了,不过,早上班车正好遇到堵车,一下就想到这不就是个死锁么,用这个举例子会说的比较明白。

先放一张堵车图片
p4_b.jpg
十字路口的车,来自东西南北四个方向,如果南北一直通行,那么正常情况东西就不能走了,这就叫阻塞,只要等南北走完了,东西就可以走了,锁就解开了

死锁是怎么形成的呢?
就像图片中,东西南北四个方向,均有通行需求,但是却都被别的车辆堵住了,都获得不了通行权,于是就堵死了,这就是死锁

怎么避免死锁呢?
首先如果设计好交通灯,就不会死锁,只会阻塞,就是说从业务设计上避免互相争用对方持有的资源。
还有,可以禁止大车通行,就是尽可能避免表锁发生,具体来说就是外键一定要加索引,因为外键不加索引,整个子表太容易被锁,给死锁创建了条件,当然还有避免使用位图索引(OLTP系统)

堵车怎么办?
堵车了当然需要有人指挥,而且需要有人让步,对应到oracle,一旦有死锁,oracle就会立马处理,并杀死一个会话。所以今天堵车,我也学习oracle,立刻下车,指挥往东走的三辆车后退一个车道。

最后修改时间:2020-06-04 14:20:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论