
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
锁的应用是程序员在开发软件的时候会经常用到的一个编程开发技术,而本文我们就通过案例分析来简单了解一下,软件开发死锁的概念与产生原因。
什么是死锁
死锁是并发系统中常见的问题,同样也会出现在数据库MySQL的并发读写请求场景中。当两个及以上的事务,双方都在等待对方释放已经持有的锁或因为加锁顺序不一致造成循环等待锁资源,就会出现“死锁”。常见的报错信息为”Deadlockfoundwhentryingtogetlock...”。
举例来说A事务持有X1锁,申请X2锁,B事务持有X2锁,申请X1锁。A和B事务持有锁并且申请对方持有的锁进入循环等待,就造成了死锁。
从死锁的定义来看,MySQL出现死锁的几个要素为:
两个或者两个以上事务
每个事务都已经持有锁并且申请新的锁
锁资源同时只能被同一个事务持有或者不兼容
事务之间因为持有锁和申请锁导致彼此循环等待
怎么避免死锁呢?
将大事务拆成小事务
添加合理的索引,走索引避免为每一行加锁,降低死锁的概率
避免业务上的循环等待(如加分布式锁之类的)
降低事务隔离级别(如RR->RC当然不建议这么干)
并发插入时使用replace/onduplicate也可以避免死锁
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。