C語言多執行緒程式設計 死鎖解析

2022-04-05 18:50:58 字數 791 閱讀 4405

1.假設有兩個執行緒

a執行緒負責輸出奇數。b執行緒負責輸出偶數。

2.當a執行緒進入鎖定狀態是,主線程突然異常將a執行緒停止,這時將導致b執行緒也無法繼續執行,處於死鎖狀態。如下**:

#include #include 

#include

pthread_mutex_t m;

void *runodd(void *d)

}void *runeven(void *d)

}main()

解決方法:

運用2個函式(其實是2個巨集)

pthread_cleanup_push

pthread_cleanup_pop 這個對函式作用類似於atexit函式

注意:這不是函式而是巨集。必須成對使用。

void pthread_cleanup_push(

void (*routine)(void *),//**函式

void *arg //**函式的引數

觸發呼叫routine的條件:

執行了exit()。

執行了pthread_cancel()

pthread_cleanup_pop(1);//引數必須是1

#include #include 

#include

pthread_mutex_t m;

void handle(void *d)

void *runodd(void *d)

}void *runeven(void *d)

}

C 多執行緒 死鎖

相信有過多執行緒程式設計經驗的朋友,都吃過死鎖的苦。除非你不使用多執行緒,否則死鎖的可能性會一直存在。為什麼會出現死鎖呢?我想原因主要有下面幾個方面 1 個人使用鎖的經驗差異 2 模組使用鎖的差異 3 版本之間的差異 4 分支之間的差異 5 修改 和重構 帶來的差異 不管什麼原因,死鎖的危機都是存在...

C 多執行緒死鎖

死鎖問題被認為是執行緒 程序間切換消耗系統效能的一種極端情況。在死鎖時,執行緒 程序間相互等待資源,而又不釋放自身的資源,導致無窮無盡的等待,其結果是任務永遠無法執行完成。死鎖出現的場景 當 中有2個鎖,鎖a和鎖b,也有2個執行緒,執行緒1和執行緒2,執行緒1執行時,先搶到鎖a,然後要去搶占b,同時...

C 語言多執行緒程式設計

一 linux 下相關函式 函式描述 intpthread create pthread t thread,pthread attr t attr,void start routine void void arg 建立乙個新的執行緒。編譯時帶上 lpthread.引數說明 thread 是乙個指標,...