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