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

2021-05-09 18:24:36 字數 1472 閱讀 2285

2

、執行緒的終止

如果程序中任何乙個執行緒中呼叫

exit

,_exit,

或者是_exit

,那麼整個程序就會終止,

與此類似,如果訊號的預設的動作是終止程序,那麼,把該訊號傳送到執行緒會終止程序。

執行緒的正常退出的方式:

(1)

執行緒只是從啟動例程中返回,返回值是執行緒中的退出碼

(2)

執行緒可以被另乙個程序進行終止

(3)

執行緒自己呼叫

pthread_exit

函式兩個重要的函式原型:

#include

void pthread_exit(void *rval_ptr);

/*rval_ptr

執行緒退出返回的指標

*/int pthread_join(pthread_t thread,void **rval_ptr);

/*成功結束程序為

0,否則為錯誤編碼

*/例程

6程式目的:執行緒正常退出,接受執行緒退出的返回碼

程式名稱:

編譯方法:

gcc -wall pthread_exit.c -lpthread

執行結果:

new thread is created ...

thread is exit code 8

例程總結:

可以看出來,執行緒退出可以返回執行緒的

int數值。執行緒退出不僅僅可以返回執行緒的

int數值,還可以返回乙個複雜的資料結構。例程7

程式目的:執行緒結束返回乙個複雜的資料結構

程式名稱:

pthread_return_struct.c

#include

#include

#include

struct menber

temp=;

void *create(void *arg)

int main(int argc,char *argv)

printf("main ... /n");

error = pthread_join(tid,(void *)&c);

if( error )

printf("c->a = %d  /n",c->a);

printf("c->b = %s  /n",c->b);

sleep(1);

return 0;

}編譯方法:

gcc -wall pthread_return_struct.c -lpthread

執行結果:

main ...

new thread ...

c->a = 8

c->b = zieckey

例程總結:

一定要記得返回的資料結構要是在這個資料要返回的結構沒有釋放的時候應用,

如果資料結構已經發生變化,那返回的就不會是我們所需要的,而是髒資料

多執行緒的作業系統

在支援多執行緒的作業系統中,假設程序p建立了若干個執行緒,那麼 47 是不能被其他執行緒共享的。47 a.該程序的 段 b.該程序中開啟的檔案 c.該程序的全域性變數 d.該程序中線程的棧指標 答案 d 解析 同一程序間的執行緒共享的資源包括 1 堆 由於堆是在程序空間中開闢出來的,所以它是理所當然...

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

函式原型 include void pthread cleanup push void rtn void void arg 函式rtn 是清理函式,arg是呼叫引數 void pthread cleanup pop int execute 在前面講過執行緒的終止方式,是正常終止還是非正常終止,都會存...

linux多執行緒 作業系統執行緒同步互斥

這一目主要我想得是理論和實際結合的辦法去做,先將理論,把這塊在作業系統中的內容先進行陳述。然後用linux下的 去真正實現。perterson演算法是用來是實現對臨界區資源的互斥訪問,它是用軟體的機制實現。也就是說在linux系統程式設計當中,如果不讓你使用pthread mutex t mutex...