什么是死锁?是一组互相竞争资源的线程,因互相等待导致"永久"阻塞的现象。发生死锁的原因有四个:1.互斥条件,共享资源x和y只能被一个线程占用。2.占有且等待,线程t1已经取得共享资源x,在等待共享资源y的时候不释放共享资源x。3.不可抢占,其他线程不能强行抢占线程t1占有的资源。4.循环等待,线程t1等待线程t2占有的资源,线程t2等待线程t1占有的资源。那如何避免死锁呢,既然发生死锁的原因是需要同时满足这四个条件,我们只需要打破其中任意一个条件即可避免死锁问题 ,而在这四个条件中,第一个互斥条件是无法被破坏的,因为锁本身就是通过互斥来解决线程安全问题的,所以对于剩下三个,我们可以逐一进行分析,那么对于“占有且等待”这个条件时,我们可以一次性申请所有的资源,这样就不存在等待了,第二个就是对于“不可抢占”这个条件,占有部分资源的线程进一步申请其他资源时,可以主动释放它占有的资源,这样不可抢占的这个条件就被破坏了。第三个点,对于“循环等待”这个条件,可以按照顺序申请 资源来进行预防,所谓按序申请,是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的这样线性化以后自然就不存在循环等待了。
线程中的死锁
最新推荐文章于 2024-09-06 16:06:37 发布