死鎖:
死鎖就是你和小明打架,互相掐住對方脖子,你們都說「你先放!」,結果誰都不放,死鎖了.
在程式裡面,有兩個鎖,a執行緒鎖住第乙個,b執行緒鎖住了第二個,這時如果a再試圖鎖第二個,失敗,因為b已經鎖住了,a只能等待.就在這時b試圖鎖第乙個,結果失敗,因為a已經鎖住了,b只好等待.就這樣大家一直等下去,誰都不放,天荒地老...
舉例:
#include #include #include pthread_mutex_t mutex1 = pthread_mutex_initializer;
pthread_mutex_t mutex2 = pthread_mutex_initializer;
pthread_mutex_t mutex3 = pthread_mutex_initializer;
pthread_mutex_t mutex4 = pthread_mutex_initializer;
static int sequence1 = 0;
static int sequence2 = 0;
int func1()
int func2()
void* thread1(void* arg)
} } void* thread2(void* arg)
} } void* thread3(void* arg)
} void* thread4(void* arg)
} int main()
if (pthread_create(&tid[1], null, &thread2, null) != 0)
if (pthread_create(&tid[2], null, &thread3, null) != 0)
if (pthread_create(&tid[3], null, &thread4, null) != 0)
sleep(5);
//pthread_cancel(tid[0]);
pthread_join(tid[0], null);
pthread_join(tid[1], null);
pthread_join(tid[2], null);
pthread_join(tid[3], null);
pthread_mutex_destroy(&mutex1);
pthread_mutex_destroy(&mutex2);
pthread_mutex_destroy(&mutex3);
pthread_mutex_destroy(&mutex4);
return 0;
}
gcc dead_lock.c -g -lpthread -o dead_lock
./dead_lock
分析:
gdb除錯
併發程式設計之死鎖
產生死鎖的4個必要條件 產生死鎖的情況 交叉鎖引起的執行緒會進入blocked狀態,cpu資源棧用不高,很容易借助工具發現 情景描述 執行緒a持有鎖1,等待獲取鎖2 執行緒b持有鎖2,等待獲取鎖1。private final static object mutex read new object p...
多執行緒之死鎖
1 死鎖發生的場景 有時候兩個或者多個執行緒需要訪問同乙份資源,這裡就涉及到執行緒同步的問題 thread1 synchronized object1 thread2 synchronized object2 看看上面的例子,兩個執行緒各自都有想要訪問對方的想法,可是雙方都不願意放手,就像a拿到了開...
多執行緒之死鎖
死鎖。同步中巢狀同步。你有一根筷子,我有一根筷子,我要吃飯,你不給我,我不給你,誰都吃不著飯,死鎖發生,但是死鎖不一會發生,也會存在和諧的狀態,就是你把筷子給我,我吃一口,我再把筷子給你,你再吃一口 class ticket implements runnable else while true s...