執行緒同步之死鎖

2021-09-25 20:45:57 字數 516 閱讀 1218

什麼是死鎖呢?

死鎖就是多個程序或者執行緒訪問同乙個資源的時候,誰也搶不到資源,誰也不退讓讓其他程序或者執行緒訪問,使用者看到的就是程式卡住了。舉個例子吧,在乙個沒有紅綠燈的十字路口,來了四輛小汽車,每個路口都只能讓乙個汽車通過。現在這種情況四輛車都過不了汽車,這就發生了死鎖。

發生死鎖的原因?

第一種情況是重複加鎖,在這種情況下,第二個鎖到來的時候,發現有鎖了,那就會阻塞在這裡等待解鎖後在加鎖,但是從**看來是不可能的。所以在用的時候一定不能重複加鎖,否則就會阻塞。

int num;

void *fun()

return null;

}

第二種情況如下圖,這就如過十字路口一樣的道理。

執行緒同步之死鎖

public class stateobject i public void deadlock2 i stateobject state1 new stateobject stateobject state2 new stateobject new thread new samplethread s...

執行緒同步之死鎖

造成死鎖的兩種情況 1 對共享資源鎖了2次。while 1 如上,鎖了兩次,此時現象是 輸出了一遍hello,便不動了 分析 輸出hello後,pthread mutex lock mutex 又要加鎖,加鎖的話,就要先等上一把鎖解鎖,否則就處於阻塞狀態,而上一把鎖就是他本身,他本身又沒有解鎖,所以...

多執行緒之死鎖

1 死鎖發生的場景 有時候兩個或者多個執行緒需要訪問同乙份資源,這裡就涉及到執行緒同步的問題 thread1 synchronized object1 thread2 synchronized object2 看看上面的例子,兩個執行緒各自都有想要訪問對方的想法,可是雙方都不願意放手,就像a拿到了開...