死锁
由于两个或两个以上的线程相互争夺对方的资源,而同时不释放自己的资源,导致所有线程同时被阻塞
产生死锁的四大条件
互斥条件:一个资源在同一时刻只能由一个运算单元(进程、线程或协程)占用(排它性)
请求与保持条件:一个线程在请求被占资源时发生阻塞,并对已获得的资源保持不放。
循环等待条件:发生死锁时,所有的线程会形成一个死循环,一直阻塞。
不剥夺条件:线程在已获得的资源但未使用完时,不能被其他线程剥夺,只能由自己使用完释放资源。
解决死锁
按照顺序加锁:按照顺序申请资源。
设置获取锁的超时时间:尝试获取锁的线程在规定时间内没有获取到锁,就放弃获取锁,避免因为
长时间等待锁而引起的死锁。
破坏不剥夺条件:线程在申请不到所需资源时,主动放弃所持有的资源。