由pthread create引起的段錯誤

2022-08-22 13:27:10 字數 740 閱讀 1798

一般執行緒的結束是由程序內的其他執行緒來結束的,呼叫pthread_cancel.

但是需要考慮到被結束執行緒的性質,一方面,執行緒是可被結束,也可無法結束,即不響應該訊號;另一方面,如果執行緒是可被結束的,那麼結束的方式有兩種,一種是同步,當執行緒收到這個訊號的時候先掛起,等到下乙個取消點時再響應該訊號,另一種是非同步,收到這個訊號時,執行緒立即結束。

注意:執行緒預設是可被取消,同步結束。

什麼是取消點?

取消點是很多的系統呼叫,pthread_join,write等很多系統呼叫,包括很多的庫函式呼叫,printf等,因為printf中有前面所說的系統呼叫write。

是不是取消點我覺得可以自己做乙個簡單地測試。

為什麼要考慮執行緒的性質呢?

考慮以下情況:

父執行緒a和子執行緒b(未設定非同步結束),共同訪問資源c,父執行緒結束子執行緒b,但是pthread_cancel只是傳送訊號,接著父執行緒接著釋放資源c,當b恢復執行時,由於不是直接結束而會等待下乙個取消點,而在下乙個取消點前,b訪問了資源c,此時程式就會崩潰。

所以執行緒間的同步,要麼設定子執行緒非同步結束,或者父執行緒等待子執行緒結束的訊號。

附:設定執行緒同步結束還是非同步結束介面:

int pthread_setcanceltype(int type, int *oldtype);

type可取值非同步pthread_cancel_asynchronous        同步pthread_cancel_deferred   oldtype返回原先的屬性

pthread create 函式用法

天開始學習linux下用c開發多執行緒程式,linux系統下的多執行緒遵循posix執行緒介面,稱為pthread。include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void s...

pthread create函式詳解

pthread create是unix環境建立執行緒函式 include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict a...

pthread create引數傳遞

說明 本文 多執行緒程式設計之pthread create函式應用,在此基礎上筆者做了些許改動。pthread create函式 函式簡介 pthread create是unix環境建立執行緒函式 標頭檔案 include 函式宣告 int pthread create pthread t rest...