多線程pthread_create的參數(shù)

多線程編程

C語(yǔ)言使用pthread_create()函數(shù)完成多線程的創(chuàng)建序六,pthread_create()函數(shù)共有四個(gè)參數(shù)。這四個(gè)參數(shù)分別為:

1. pthread_t *

第一個(gè) 參數(shù)負(fù)責(zé)向調(diào)用者傳遞子線程的線程號(hào)

2. const pthread_attr_t *

第二這個(gè)參數(shù)負(fù)責(zé)控制線程的各種屬性蒙具,這也是線程在創(chuàng)建的時(shí)候,最為復(fù)雜的一個(gè)參數(shù)朽肥。下面是這個(gè)結(jié)構(gòu)體的定義:

線程屬性結(jié)構(gòu)如下:
typedef struct
{
       int                               detachstate;   //線程的分離狀態(tài)
       int                               schedpolicy;  //線程調(diào)度策略
       structsched_param              schedparam;  //線程的調(diào)度參數(shù)
       int                               inheritsched;  //線程的繼承性
       int                                scope;       //線程的作用域
       size_t                           guardsize;   //線程棧末尾的警戒緩沖區(qū)大小
       int                                stackaddr_set;   //線程堆棧的地址集
       void*                          stackaddr;   //線程棧的位置
       size_t                           stacksize;    //線程棧的大小
}pthread_attr_t;

2.1 detachstate

在結(jié)構(gòu)體中的第一個(gè)參數(shù)detachstate說(shuō)明了線程的分離狀態(tài)禁筏。
PTHREAD_CREATE_DETACHED分離狀態(tài):父線程在創(chuàng)建子線程之后,,父線程不會(huì)去等待子線程結(jié)束再去運(yùn)行自己接下來(lái)的程序衡招;
PTHREAD_CREATE_JOINABLE狀態(tài):父線程會(huì)等待子線程運(yùn)行結(jié)束篱昔,才繼續(xù)運(yùn)行接下來(lái)的程序。

注意的是如果當(dāng)線程一旦處于PTHREAD_CREATE_DETACHED狀態(tài)始腾,那么線程的狀態(tài)就無(wú)法再被修改了州刽。線程創(chuàng)建時(shí)默認(rèn)設(shè)置為PTHREAD_CREATE_JOINABLE狀態(tài)

這個(gè)參數(shù)通過(guò)下面的兩個(gè)函數(shù)進(jìn)行設(shè)置或者讀取
讀取線程分離狀態(tài):int pthread_attr_getdetachstate(const pthread_attr_t *attr,int detachstate);
設(shè)置線程分離狀態(tài):int pthread_attr_setdetachstate(pthread_attr_t *attr,intdetachstate);

線程的分離狀態(tài)也可以在線程創(chuàng)建之后再去設(shè)置:
pthread_detach()

2.2 schedpolicy

schedpolicy說(shuō)明的是線程的調(diào)度策略,這個(gè)值可以分別被設(shè)置為:
SCHED_FIFO:先進(jìn)先出
SCHED_RR:輪轉(zhuǎn)法
SCHED_OTHER:其他方法

這個(gè)參數(shù)可以通過(guò)下面的函數(shù)操作:
讀壤思:int pthread_attr_getschedpolicy(const pthread_attr_t*attr,int *policy);
設(shè)置:int pthread_attr_setschedpolicy(pthread_attr_t *attr,intpolicy);

2.3 schedparam

schedparam參數(shù)實(shí)際上設(shè)置的是線程的優(yōu)先級(jí)穗椅。這個(gè)參數(shù)僅當(dāng)調(diào)度策略為實(shí)時(shí)(即SCHED_RR或SCHED_FIFO)時(shí)才有效

這個(gè)參數(shù)可以通過(guò)下面的函數(shù)操作:
讀取:int pthread_attr_getschedparam(const pthread_attr_t*attr,struct sched_param *param);
設(shè)置:int pthread_attr_setschedparam(pthread_attr_t *attr,conststruct sched_param *param);

線程運(yùn)行時(shí)允許對(duì)這個(gè)值進(jìn)行修改:
pthread_setschedparam()

2.4 inheritsched

這個(gè)參數(shù)設(shè)置線程的調(diào)度參數(shù)是拷貝父線程的線程調(diào)度參數(shù)奶栖,還是上面的兩個(gè)參數(shù)schedpolicyschedparam屬性進(jìn)行設(shè)置匹表。
該參數(shù)可以被設(shè)為:
PTHREAD_INHERIT_SCHED:表示新現(xiàn)成將繼承創(chuàng)建線程的調(diào)度策略和參數(shù))
PTHREAD_EXPLICIT_SCHED:表示使用在schedpolicy和schedparam屬性中顯式設(shè)置的調(diào)度策略和參數(shù)

這個(gè)參數(shù)通過(guò)下面的兩個(gè)函數(shù)進(jìn)行設(shè)置或者讀取
讀让趴馈:int pthread_attr_getinheritsched(const pthread_attr_t*attr,int *inheritsched);
設(shè)置:int pthread_attr_setinheritsched(pthread_attr_t *attr,intinheritsched);

2.5 scope

scope參數(shù)設(shè)置的是線程優(yōu)先級(jí)的使用范圍。
PTHREAD_SCOPE_PROCESS 進(jìn)程級(jí)競(jìng)爭(zhēng)資源
PTHREAD_SCOPE_SYSTEM 系統(tǒng)級(jí)競(jìng)爭(zhēng)資源

該參數(shù)可以由下面的函數(shù)操作
讀壬:ⅰ:int pthread_attr_getscope(pthread_attr_t *attr, int *scope);
設(shè)置:int pthread_attr_setscope(pthread_attr_t *attr, int scope);

2.6 stackaddr

這個(gè)參數(shù)是線程棧的起始地址拜鹤,這個(gè)參數(shù)只有在線程棧由自己創(chuàng)建時(shí)框冀,才需要設(shè)置流椒。當(dāng)線程棧由用戶(hù)直接創(chuàng)建,而不是通過(guò)系統(tǒng)創(chuàng)建時(shí)明也,線程棧的大小和位置都可以進(jìn)行修改宣虾,但是用戶(hù)程序需要完成對(duì)線程棧空間的釋放温数。在設(shè)置該參數(shù)之后绣硝,guardsize警戒棧緩沖區(qū)的大小就變?yōu)?,為了防止棧溢出就需要對(duì)線程棧的境界棧緩沖區(qū)進(jìn)行設(shè)置撑刺。

該參數(shù)之前由單獨(dú)的函數(shù)進(jìn)行設(shè)置鹉胖,但是目前已經(jīng)被下面的函數(shù)取代:
讀取:int pthread_attr_getstack(const pthread_attr_t *attr, void *stackaddr, size_t *stacksize);
設(shè)置:int pthread_attr_setstack(pthread_attr_t *attr,void *stackaddr, size_t stacksize);

2.7 guardsize

這個(gè)參數(shù)設(shè)置警戒棧緩沖區(qū)的大小够傍。警戒棧緩沖區(qū)可以保護(hù)程序甫菠,防止棧溢出對(duì)數(shù)據(jù)造成破壞。

這個(gè)參數(shù)可以由下面的函數(shù)進(jìn)行操作
讀让嵬汀:int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize);
設(shè)置:int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);

2.8 stacksize

stacksize參數(shù)在線程創(chuàng)建之前創(chuàng)建寂诱,用來(lái)修改創(chuàng)建的線程棧的大小,但是最小不能低于PTHREAD_STACK_MIN (16384) bytes安聘,即16k內(nèi)存大小痰洒,也就是4個(gè)內(nèi)存頁(yè)(4個(gè)內(nèi)存頁(yè)這一點(diǎn)由內(nèi)核決定)。

該參數(shù)可以由下面的函數(shù)操作
讀仍【隆:int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
設(shè)置:int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);

3. void *(*start_routine) (void *)

這個(gè)參數(shù)負(fù)責(zé)指定子線程需要允許的函數(shù)丘喻,這個(gè)參數(shù)需要的是一個(gè)函數(shù)指針。

4. void *

這個(gè)參數(shù)負(fù)責(zé)指定念颈,子線程所運(yùn)行的函數(shù)的參數(shù)值泉粉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舍肠,隨后出現(xiàn)的幾起案子搀继,更是在濱河造成了極大的恐慌,老刑警劉巖翠语,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叽躯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肌括,警方通過(guò)查閱死者的電腦和手機(jī)点骑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)酣难,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人黑滴,你說(shuō)我怎么就攤上這事憨募。” “怎么了袁辈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵菜谣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我晚缩,道長(zhǎng)尾膊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任荞彼,我火速辦了婚禮冈敛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸣皂。我一直安慰自己抓谴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布寞缝。 她就那樣靜靜地躺著癌压,像睡著了一般。 火紅的嫁衣襯著肌膚如雪第租。 梳的紋絲不亂的頭發(fā)上措拇,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音慎宾,去河邊找鬼丐吓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛趟据,可吹牛的內(nèi)容都是我干的券犁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汹碱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粘衬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起咳促,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稚新,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后跪腹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體褂删,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年冲茸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屯阀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缅帘。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖难衰,靈堂內(nèi)的尸體忽然破棺而出钦无,到底是詐尸還是另有隱情,我是刑警寧澤盖袭,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布失暂,位于F島的核電站,受9級(jí)特大地震影響苍凛,放射性物質(zhì)發(fā)生泄漏趣席。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一醇蝴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧想罕,春花似錦悠栓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至楼镐,卻和暖如春癞志,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背框产。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工凄杯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秉宿。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓戒突,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親描睦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膊存,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355