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 是乙個指標,...