课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
锁的问题在软件编程开发中是非常常见的,而今天我们就一起来了解一下,软件编程开发过程中如果出现死锁了应该怎么办。
在多线程或者分布式系统程序中,死锁也会发生。其本质和上述的路口车辆堵塞是一样的,都是因为参与者构成了循环等待,使得所有参与者都等不到想要的结果,从而永远等在那里不能取得进展。Linux内核当然也会发生死锁,如果核心部分(Core),如调度器和内存管理,或者子系统,如文件系统,发生死锁,都会导致整个系统不可用。
如何对付死锁一直是学术界和应用领域积极研究和解决的问题。我们可以将对死锁的解决方案粗略地分为:死锁发现(Detection)、死锁避免(Prevention)和死锁预测(Prediction)。死锁发现是指在在程序运行中发现死锁实例;死锁避免则是在发现死锁实例即将生成时进一步防止这个实例;而死锁预测则是通过静态或者动态方法找出程序中的潜在死锁,从而从根本上预先消除死锁隐患。
刚才我们所指的锁都是互斥锁(ExclusiveLock)。读写锁是一种更复杂的锁,或者说一种通用的锁(GeneralLock),我们可以认为互斥锁是只用写锁的读写锁。只要没有写锁或者写锁的争抢,读锁允许读者(Reader)同时持有。Linux内核中有多种读写锁,主要包括:rwsem、rwlock和qrwlock等。问题是,读写锁会让死锁预测变得异常复杂,Lockdep就不能支持这几种读写锁,因此Lockdep在使用过程中会产生一些相关的错误假阳性(FalsePositive)死锁预测和错误假阴性(FalseNegative)死锁预测。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。