死锁的这个概念在很多地方都存在,大概介绍下死锁是怎么产生的。
1.A拿了一个苹果
2.B拿了一个香蕉
A现在想再拿个香蕉,就在等待B释放这个香蕉,B同时想要再拿个苹果,这时候就等待A释放苹果
这样就是陷入了僵局,这就是生活中的死锁。
关于死锁的问题解决方案:
1.对锁进行排序
2.可以让线程在尝试持有新的锁失败的时候主动放弃所有目前已经持有的锁,比如我们可以设置机制检测死锁的发生并对其进行处理。
3.对这些锁进行编号。我们规定当一个线程需要同时持有多个锁的时候,必须要按照序号升序的顺序对这些锁进行访问。通过上下文管理器我们可以很容易实现这一点。