1.什麼是死鎖:
2.什麼情況造成死鎖:
前提條件:你有2個鎖,
當執行緒a獲得一把鎖的時候,想要獲得另外一把鎖,而執行緒b使用著執行緒a想要的鎖,還想要獲得執行緒a正在使用的鎖的時候。
#include
#include
int g_data=0;
//共享資源
pthread_mutex_t mutex;
//建立互斥鎖1(互斥量)
pthread_mutex_t mutex2;
//建立互斥鎖2(互斥量)
void
*func1
(void
*arg)
//引數3:呼叫無型別指標api
pthread_mutex_unlock
(&mutex)
;//解鎖,別的執行緒可以上了
}void
*func2
(void
*arg)
//引數3:呼叫無型別指標api
//大家都拿不到另外一把想要的鎖,就會造成死鎖
intmain()
if(ret==0)
printf
("main:%ld\n",(
unsigned
long
)pthread_self()
);pthread_join
(t1,
null);
//等待執行緒
pthread_join
(t2,
null);
//等待執行緒
pthread_mutex_destroy
(&mutex)
;//銷毀這把鎖
pthread_mutex_destroy
(&mutex2)
;//銷毀這把鎖
return0;
}
執行結果:
dazai@dazai:
~$ gcc demo3.c -lpthread
dazai@dazai:
~$ .
/a.out
main函式建立執行緒t1成功
main函式建立執行緒t2成功
main:
-1210755328
注:執行結果執行到一半鎖死
是什麼情況造成死鎖
include include include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict arg int g data...
什麼情況會發生死鎖,死鎖的處理方法
如兩個程序分別等待對方占有的資源,於是兩個程序都不能執行而處於等待狀態,此執行緒稱為死鎖。程序的三態模型 就緒態 leftrightarrow 執行態 to 等待態 to 就緒態 程序的五態模型 建立程序 to 就緒態 leftrightarrow 執行態 to 等待態 to 就緒態 執行態 to ...
C 是什麼情況
說起lambda表示式其實簡單理解為乙個方法,什麼方法呢 是個匿名方法 就是乙個沒名字的方法 第一種 是乙個既沒有引數又沒有返回值的方法 第二種 x x 2 是乙個引數為x返回值為x 2的方法 第三種 x,y x y 是乙個引數為x和y返回值為兩個引數之和的的方法,當引數大於乙個的時候lambda前...