Linux多執行緒之執行緒建立

2021-10-02 21:59:20 字數 2368 閱讀 2861

1. 函式

#include

intpthread_create

(pthread_t *restrict thread,

const pthread_attr_t *restrict attr,

void*(

*start_routine)

(void*)

,void

*restrict arg)

;

引數:

thread 為執行緒id的容器, 通過型別可知為傳位址即(&pthread_id)

attr 執行緒位址一般用null

為執行緒操作函式function,即執行緒執行**(函式名傳遞方式)

arg為function 操作所需要的引數(可自定義)

2. 1 **(傳遞基本型別)

#include

#include

void

*function

(void

*arg)

return

(void*)

0;//細節,執行緒主動終止

}int

main()

if((err=

pthread_create

(&turtle,

null

,function,

(void*)

50))!=

0)//主線程等待子執行緒結束方可執行下面的程式

pthread_join

(rabbit,

null);

pthread_join

(turtle,

null);

//主線程id

printf

("control thread id: %lx\n"

,pthread_self()

);printf

("finished....\n");

return0;

}

注:

程式編譯時記得加入 -lpthread 選項

2.2 **(傳遞結構體)

#include

#include

#include

typedef

struct

data;

void

*function

(void

*arg)

return

(void*)

0;//執行緒主動終止

}int

main()

; data t_a=

;//建立執行緒if(

(err=

pthread_create

(&rabbit,

null

,function,

(void*)

&r_a))!=

0)//傳位址if(

(err=

pthread_create

(&turtle,

null

,function,

(void*)

&t_a))!=

0)//傳位址

pthread_join

(rabbit,

null);

pthread_join

(turtle,

null);

//主線程id

printf

("control thread id: %lx\n"

,pthread_self()

);printf

("finished....\n");

return0;

}

3. 問題

3.1 多執行緒共享哪些? 獨佔哪些?

答: 由於同一程序的多個執行緒共享同一位址空間,因此text、segment、data segment都是共享的,如果定義乙個函式,在各執行緒中都可以呼叫,如果定義乙個全域性變數,在各執行緒中都可以訪問到,除此之外,各執行緒還共享以下程序資源和環境:

檔案描述符表

每種訊號的處理方式( sig_ign 、 sig_dfl 或者自定義的訊號處理函式)

當前工作目錄

使用者id和組id

但有些資源是每個執行緒各有乙份的(即獨佔的):

執行緒id

上下文,包括各種暫存器的值、程式計數器和棧指標

棧空間errno 變數

訊號遮蔽字

排程優先順序

多執行緒之建立

建立執行緒的構造方法 1.thread 分配新的 thread 物件。2.thread runnable target 分配新的 thread 物件。3.thread string name 建立乙個執行緒,並給該執行緒物件分配乙個名字。4.thread runnable target,string...

C 多執行緒之建立多執行緒CreateThread

includehandle winapi createthread in opt lpsecurity attributes lpthreadattributes,in size t dwstacksize,in lpthread start routine lpstartaddress,in op...

Linux 多執行緒之執行緒的建立和退出

include apue.h 1.main函式的執行緒稱為初始執行緒或主線程,主線程在main函式返回的時候,會導致 整個程序結束。可以在主線程中使用pthread exit函式 退出主線程 如此,程序會等待所有的執行緒結束時候才終止 struct person void thread fun vo...