函式原型:
#include
void pthread_cleanup_push(void (*rtn)(void *),void *arg);
函式rtn
是清理函式,
arg是呼叫引數
void pthread_cleanup_pop(int execute);
在前面講過執行緒的終止方式,是正常終止還是非正常終止,都會存在乙個資源釋放的問題,在
posix
中提供了一組,就是我們上面看的函式進行執行緒退出的處理函式,有些像在程序中的
atexit
函式。釋放的方式是指
pthread_cleanup_push
的呼叫點到
pthread_cleanup_pop
之間程式段進行終止。
pthread_cleanup_push()/pthread_cleanup_pop
採用先入後出的方式的棧的管理方式,
void *rtn(void *),
在執行pthread_cleanup_push()
時壓入函式棧,多次執行
pthread_cleanup_push()
形成乙個函式鏈,在執行這個函式鏈的時候會以反方向彈出,即先入後出。
execute
參數列識,是否執行彈出清理函式,當
execute=0
時不進行彈出清理函式,非零的時候彈出處理函式。例程9
程式目的:實現在正常結束執行緒的時候,進行函式處理
程式名稱:
編譯方法:
gcc -wall -lpthread pthread_clean.c
執行結果:
thread 1 start
thread 1 push complete
thread 1 exit code 1
thread 2 start
thread 2 push complete
cleanup :thread 2 second handler
cleanup :thread 2 first handler
thread 2 exit code 2
多執行緒的作業系統
在支援多執行緒的作業系統中,假設程序p建立了若干個執行緒,那麼 47 是不能被其他執行緒共享的。47 a.該程序的 段 b.該程序中開啟的檔案 c.該程序的全域性變數 d.該程序中線程的棧指標 答案 d 解析 同一程序間的執行緒共享的資源包括 1 堆 由於堆是在程序空間中開闢出來的,所以它是理所當然...
Linux作業系統下的多執行緒程式設計詳細解析(2)
2 執行緒的終止 如果程序中任何乙個執行緒中呼叫 exit exit,或者是 exit 那麼整個程序就會終止,與此類似,如果訊號的預設的動作是終止程序,那麼,把該訊號傳送到執行緒會終止程序。執行緒的正常退出的方式 1 執行緒只是從啟動例程中返回,返回值是執行緒中的退出碼 2 執行緒可以被另乙個程序進...
linux多執行緒 作業系統執行緒同步互斥
這一目主要我想得是理論和實際結合的辦法去做,先將理論,把這塊在作業系統中的內容先進行陳述。然後用linux下的 去真正實現。perterson演算法是用來是實現對臨界區資源的互斥訪問,它是用軟體的機制實現。也就是說在linux系統程式設計當中,如果不讓你使用pthread mutex t mutex...