Linux作業系統下的多執行緒程式設計詳細解析(4)

2021-05-09 18:24:36 字數 1093 閱讀 9204

函式原型:

#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...