造成死锁的原因:
1、 自己锁自己。线程获得锁A,没有给自己解锁又去拿锁A,一直阻塞造成死锁。
2、 两个共享数据,两把锁AB。线程一获得锁 A后又去获取锁B,但是线程二获得B锁又去获取A锁,两者都拿不到对方的锁,两者造成死锁。
解决方法:
1让线程按顺序访问共享资源。
2在访问另外一个共享资源之前先解锁已经拥有的锁
3在访问之前使用trylock函数尝试加锁,如果失败就直接返回
造成死锁的原因:
1、 自己锁自己。线程获得锁A,没有给自己解锁又去拿锁A,一直阻塞造成死锁。
2、 两个共享数据,两把锁AB。线程一获得锁 A后又去获取锁B,但是线程二获得B锁又去获取A锁,两者都拿不到对方的锁,两者造成死锁。
解决方法:
1让线程按顺序访问共享资源。
2在访问另外一个共享资源之前先解锁已经拥有的锁
3在访问之前使用trylock函数尝试加锁,如果失败就直接返回