- 死鎖:是指兩個或兩個以上的進程(或線程)在執行過程中,因爭奪資源而造成的一種相互等待的現象,若無外力作用,他們將無法推進下去;
- 活鎖:是指兩個線程優先級相同,都禮讓不走,就這樣一直僵持下去;
- 餓死:在單線程情況下,A、B兩個線程,A先執行;A在執行過程中,C線程來了,B讓C先執行;C在執行過程中,D線程來了,B也讓D先執行,就這樣B一直都是等待狀態。
- 競態條件:多個線程競爭同一個變量,導致數據的不正確性,線程的訪問順序是不可控的,會影響最終的結果。
產生死鎖的必要條件:
1、互斥使用(資源獨占)
一個資源每次只能給一個進程使用(比如寫操作)
2、占有且等待:
進程在申請新的資源的同時,保持對原有資源的占有
3、不可搶占:
資源申請者不能強行從資源占有者手動奪取資源,資源只能由占有者自願釋放
4、循環等待:
A等待B占有的資源,B等待C占有的資源,C等待D占有的資源,..........N等待A的資源,形成一個線程等待回路
