如果在多線程應用程序沒有線程在任何時候獲得過任何形式的不止一個鎖,這種鎖總是在某個時候釋放出來,是死鎖可能嗎?必要對死鎖的充分條件發生
我想答案是「否」 - 如果另一個線程想要一個不可用的鎖,它將不會阻止任何其他線程運行的鎖,而只會阻塞,直到它想要的鎖變爲可用 - true ?
如果是這樣的話,在什麼時候做死鎖成爲可能?例如,如果除一個線程之外的所有線程永遠不會獲得多個鎖,那麼是否會造成死鎖?我個人看不出如何。
經典的死鎖案例是一個線程擁有鎖定A的情況,但需要鎖定B,而另一個線程擁有鎖定B並且需要鎖定A.顯然,這對於死鎖是足夠的,但這是最低限度的必要嗎?
你說的意思是「任何一種形式?」您所指的鎖是否有多種類型? – 2013-02-24 21:51:27
可能是 - 互斥量,信號量等 - 線程阻塞控制對共享資源的訪問的同步元素的任何基礎。 – omatai 2013-02-24 21:58:35