linux C程式設計之死鎖

2021-09-20 03:59:38 字數 1614 閱讀 4608

死鎖:

死鎖就是你和小明打架,互相掐住對方脖子,你們都說「你先放!」,結果誰都不放,死鎖了.

在程式裡面,有兩個鎖,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...