乙個簡單的C 死鎖程式

2021-04-23 01:53:39 字數 714 閱讀 3651

class program

", m_count);

}}

}private static void thread1()

}private static void thread2()}}

運 行上述程式時,一般計數到300左右(筆者的機器)就發生死鎖現象了。其原因為:如果thread1鎖住m_res2同時、thread1獲得 m_res1的鎖,那麼thread1就不能獲得m_res1的鎖,當然thread2也不能獲得m_res2的鎖。這兩個執行緒都不能繼續下去,於是 m_count的值沒有變化。 如果執行緒thread1的加鎖順序與執行緒thread2相同,即:
monitor.enter(m_res1);

monitor.enter(m_res2);

此時,將不會出 現死鎖情況。假設thread1鎖住m_res1且申請鎖m_res2,thread2鎖住m_res2並申請m_res1,可以證明不會出現這種情況: 因為thread2鎖住m_res2時要麼是先鎖住了m_res1,要麼是釋放m_res1時來不及釋放m_res2。第一種現象不可能,因為 thread1鎖住了m_res1;第二種現象是釋放鎖,不存在馬上申請鎖。所以,順序相同時不會出現死鎖情況。 解決的方法還有:使用bool monitor.tryenter()方法,嘗試加鎖並設定乙個時間上界。如果鎖不住,則放棄加鎖,做其他操作。 總結:在多執行緒對多個資源加鎖時,一定要按相同的順序。

乙個簡單的C 死鎖程式

jeffrey richter在 windows核心程式設計 第5版 中描述了乙個死鎖情況 假設執行緒thread1和thread2均需要獨佔方式訪問互斥資源m res1 m res2,應用互斥物件monitor在使用前enter 相當於加鎖 使用後exit 相當於解鎖 由於涉及到兩個資源,此時需要...

乙個簡單的死鎖

死鎖 當第乙個執行緒進入第乙個if進入鎖定o1鎖定o2的同步塊,第二個執行緒在外邊等待 當第乙個執行緒出來進入第二個if,第二個執行緒進第乙個if進入o1同步 塊,第乙個執行緒進入第二個if的o2同步 塊,兩個執行緒互相等待彼此釋放鎖,造成死鎖 public class diedlock imple...

乙個簡單的verlig程式 乙個簡單C程式的介紹

我們前面學了c語言的一些理論知識,今天通過乙個簡單的程式先來看一看c語言程式是什麼樣子。然後再對程式中的 進行介紹。這個語句的功能是進行有關的預處理操作。include稱為檔案包含命令,後面尖括號的內容稱為標頭檔案或首檔案。此處指包含stdio.h系統標頭檔案,在下面主函式中使用的printf 函式...