多執行緒造成死鎖的例子

2021-07-04 13:52:32 字數 583 閱讀 9860

1、假設有如下**

pthread_mutex_t mutex;   //代表乙個全域性互斥物件

void  a()

void  b()

int main()

此時會由於在a、b方法中相互等待unlock而導致死鎖。

2、假設有如何**

mutex;   //代表乙個全域性互斥物件

void  a()

mutex.unlock();

return;

}由於在if的執行體內直接retun,而沒有呼叫unlock,導致另乙個執行緒再呼叫a方法就出現死鎖。

參考:3.我自己又想了個例子,由於多執行緒下呼叫fork()之後只有當前程序的控制線程保留下來了,其它執行緒全部消失,如果其它執行緒正在持有某個鎖,那麼由於該執行緒的死亡它再也沒有機會死鎖,此時如果子程序的那個唯一執行緒企圖獲取那個鎖,則必然是死鎖。

#include

#include

void  a()

int main ()   

else  

return 0;  

}  這裡有篇博文詳細表述了我想的例子

多執行緒之死鎖例子

例 小明和大大 吃水果 乙個人同時有水果刀和水果 才能吃水果 如果小明拿到水果,而同時大大也拿到水果,則兩個執行緒一直互相等待,造成死鎖 兩個執行緒,小明和大大同時執行 package demo4 public class dielock extends thread else catch exce...

執行緒死鎖例子

標頭檔案 include include include include include pthread mutex t mutex one,mutex two pthread mutex t mutex pthread cond t cond void thread routine one voi...

wait和notify造成死鎖的例子

public class threadlocktest implements runnable public static void main string args throws interruptedexception override public void run catch interru...