多线程与死锁
死鎖是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。
產生死鎖的原因:
一.因為系統資源不足。
二.進程運行推進的順序不合適。
三.資源分配不當。
產生死鎖的四個必要條件:
一.互斥條件:所謂互斥就是進程在某一時間內獨占資源。
二.請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
三.不剝奪條件:進程已獲得資源,在末使用完之前,不能強行剝奪。
四.循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。
死鎖的預防
打破產生死鎖的四個必要條件中的一個或幾個,保證系統不會進入死鎖狀態。
一.打破互斥條件。即允許進程同時訪問某些資源。但是,有的資源是不允許被同時訪問的,像打印機等等,這是由資源本身的屬性所決定的。所以,這種辦法并無實用價值。
二.打破不可搶占條件。即允許進程強行從占有者那里奪取某些資源。就是說,當一個進程已占有了某些資源,它又申請新的資源,但不能立即被滿足時,它必須釋放所占有的全部資源,以后再重新申請。它所釋放的資源可以分配給其它進程。這就相當于該進程占有的資源被隱蔽地強占了。這種預防死鎖的方法實現起來困難,會降低系統性能。
三.打破占有且申請條件。可以實行資源預先分配策略。即進程在運行前一次性地向系統申請它所需要的全部資源。如果某個進程所需的全部資源得不到滿足,則不分配任何資源,此進程暫不運行。只有當系統能夠滿足當前進程的全部資源需求時,才一次性地將所申請的資源全部分配給該進程。由于運行的進程已占有了它所需的全部資源,所以不會發生占有資源又申請資源的現象,因此不會發生死鎖。
四.打破循環等待條件,實行資源有序分配策略。采用這種策略,即把資源事先分類編號,按號分配,使進程在申請,占用資源時不會形成環路。所有進程對資源的請求必須嚴格按資源序號遞增的順序提出。進程占用了小號資源,才能申請大號資源,就不會產生環路,從而預防了死鎖。
總結
- 上一篇: 想捧金饭碗? 修炼这25项技能就够了!
- 下一篇: 王彪-20162321《程序设计与数据结