a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

線(xiàn)程基本編程——線(xiàn)程函數(shù)大全

2019-11-14 10:26:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
索引:1.創(chuàng)建線(xiàn)程pthread_create2.等待線(xiàn)程結(jié)束pthread_join3.分離線(xiàn)程pthread_detach4.創(chuàng)建線(xiàn)程鍵pthread_key_create5.刪除線(xiàn)程鍵pthread_key_delete6.設(shè)置線(xiàn)程數(shù)據(jù)pthread_setspecific7.獲取線(xiàn)程數(shù)據(jù)pthread_getspecific8.獲取線(xiàn)程標(biāo)示符pthread_self9.比較線(xiàn)程pthread_equal10.一次執(zhí)行pthread_once11.出讓執(zhí)行權(quán)sched_yield12.修改優(yōu)先級(jí)pthread_setschedparam13.獲取優(yōu)先級(jí)pthread_getschedparam14.發(fā)送信號(hào)pthread_kill15.設(shè)置線(xiàn)程掩碼pthread_sigmask16.終止線(xiàn)程pthread_exit17.退出線(xiàn)程pthread_cancel18.允許/禁止退出線(xiàn)程pthread_setcancelstate19.設(shè)置退出類(lèi)型pthread_setcanceltype20.創(chuàng)建退出點(diǎn)pthread_testcancel21.壓入善后處理函數(shù)22.彈出善后處理函數(shù)--------------------------------------------------------------------------------1.創(chuàng)建線(xiàn)程pthread_create#include int pthread_create(pthread_t *tid, const pthread_attr_t *tattr, void *(*start_routine)(void *), void *arg);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。創(chuàng)建一個(gè)線(xiàn)程。參數(shù)tattr中含有初始化線(xiàn)程所需要的屬性,start_routine是線(xiàn)程入口函數(shù)的地址,當(dāng)start_routine返回時(shí),相應(yīng)的線(xiàn)程就結(jié)束了。當(dāng)函數(shù)成功時(shí),線(xiàn)程標(biāo)示符保存在參數(shù)tid指向的內(nèi)存中。如果不指定屬性對(duì)象,將其置為NULL,則創(chuàng)建一個(gè)缺省的線(xiàn)程,有如下屬性:非綁定的; 未分離的; 由一個(gè)缺省大小的堆棧; 具有和父線(xiàn)程一樣的優(yōu)先級(jí)。 注意:在創(chuàng)建子線(xiàn)程時(shí),傳給子線(xiàn)程的輸入?yún)?shù)最好是由malloc()函數(shù)返回的指針或指向全局變量的指針,而不要是指向局部變量的指針。要保證子線(xiàn)程處理參數(shù)時(shí),該區(qū)域仍然有效。--------------------------------------------------------------------------------2.等待線(xiàn)程結(jié)束pthread_join#include int pthread_join(pthread_t tid, void **status);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。等待一個(gè)線(xiàn)程結(jié)束。該函數(shù)阻塞調(diào)用它線(xiàn)程,直到參數(shù)tid指定的線(xiàn)程結(jié)束。tid指定的線(xiàn)程必須在當(dāng)前進(jìn)程中,同時(shí)tid指定的線(xiàn)程必須是非分離的。不能有多個(gè)線(xiàn)程等待同一個(gè)線(xiàn)程終止。如果出現(xiàn)這種情況,一個(gè)線(xiàn)程將成功返回,別的線(xiàn)程將返回錯(cuò)誤ESRCH。如果參數(shù)status不為NULL,則將線(xiàn)程的退出狀態(tài)放在status指向的內(nèi)存中。--------------------------------------------------------------------------------3.分離線(xiàn)程pthread_detach#include int pthread_detach(pthread_t tid);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。將非分離的線(xiàn)程設(shè)置為分離線(xiàn)程。即通知線(xiàn)程庫(kù)在指定的線(xiàn)程終止時(shí)回收線(xiàn)程占用的內(nèi)存等資源。在一個(gè)線(xiàn)程上使用多次pthread_detach的結(jié)果是不可預(yù)見(jiàn)的。--------------------------------------------------------------------------------4.創(chuàng)建線(xiàn)程鍵pthread_key_create#include int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。在進(jìn)程中分配一個(gè)鍵值,這個(gè)鍵被用來(lái)表示一個(gè)線(xiàn)程數(shù)據(jù)項(xiàng)。這個(gè)鍵對(duì)進(jìn)程中所有的線(xiàn)程都是可見(jiàn)的。剛創(chuàng)建線(xiàn)程數(shù)據(jù)鍵時(shí),在所有線(xiàn)程中和這個(gè)鍵相關(guān)聯(lián)的值都是NULL。函數(shù)成功返回后,分配的鍵放在key參數(shù)指向的內(nèi)存中,必須保證key參數(shù)指向的內(nèi)存區(qū)的有效性。如果指定了解析函數(shù)destructor,那么當(dāng)線(xiàn)程結(jié)束時(shí)并且將非空的值綁定在這個(gè)鍵上,系統(tǒng)將調(diào)用destructor函數(shù),參數(shù)就是相關(guān)線(xiàn)程與這個(gè)鍵綁定的值。綁定在這個(gè)鍵上的內(nèi)存塊可由destructor函數(shù)釋放。--------------------------------------------------------------------------------5.刪除線(xiàn)程鍵pthread_key_delete#include int pthread_key_delete(pthread_key_t key);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。刪除線(xiàn)程數(shù)據(jù)鍵。這個(gè)鍵占用的內(nèi)存將被釋放,該鍵再被引用將返回錯(cuò)誤。在調(diào)用該函數(shù)之前,程序必須釋放和本線(xiàn)程相關(guān)聯(lián)的資源,該函數(shù)不會(huì)引發(fā)線(xiàn)程數(shù)據(jù)鍵的解析函數(shù)。--------------------------------------------------------------------------------6.設(shè)置線(xiàn)程數(shù)據(jù)pthread_setspecific#include int pthread_setspecific(pthread_key_t key, const void *value);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。設(shè)置和某個(gè)線(xiàn)程數(shù)據(jù)鍵綁定在一起的線(xiàn)程專(zhuān)用數(shù)據(jù)(一般是指針)。函數(shù)不會(huì)釋放原來(lái)綁定在鍵上的內(nèi)存,給一個(gè)鍵值綁定新的指針時(shí),必須釋放原指針指向的內(nèi)存,否則會(huì)發(fā)生內(nèi)存泄漏。--------------------------------------------------------------------------------7.獲取線(xiàn)程數(shù)據(jù)pthread_getspecific#include void pthread_getspecific(pthread_key_t key, void **value);無(wú)返回值。出錯(cuò)時(shí)value指向NULL。獲取綁定在線(xiàn)程數(shù)據(jù)鍵上的值,并在指定的位置存儲(chǔ)取來(lái)的值。--------------------------------------------------------------------------------8.獲取線(xiàn)程標(biāo)示符pthread_self#include pthread_t pthread_self(void);返回當(dāng)前線(xiàn)程的標(biāo)示符。--------------------------------------------------------------------------------9.比較線(xiàn)程pthread_equal#include int pthread_equal(pthread_t tid1, pthread_t tid2);如果tid1和tid2相同,函數(shù)返回一個(gè)非0值,否則返回0。如果tid1或tid2中任何一個(gè)是非法值,則返回將是不可預(yù)料的。--------------------------------------------------------------------------------10.一次執(zhí)行pthread_once#include int pthread_once(pthread_once_t *once_control, void (*init_routine)(void));返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。函數(shù)用來(lái)調(diào)用初始化函數(shù)。如果已經(jīng)有線(xiàn)程通過(guò)pthread_once調(diào)用過(guò)這個(gè)初始化函數(shù)一次,那么以后通過(guò)pthread_once函數(shù)再調(diào)用這個(gè)初始化函數(shù)將無(wú)效。參數(shù)once_control決定了相應(yīng)的初始化函數(shù)是否被調(diào)用過(guò)。它一般如下使用:[static] pthread_once_t once_control = PTHREAD_ONCE_INIT。--------------------------------------------------------------------------------11.出讓執(zhí)行權(quán)sched_yield#include int sched_yield(void);返回值:函數(shù)成功返回0。-1表示錯(cuò)誤。把當(dāng)前線(xiàn)程的執(zhí)行權(quán)(即對(duì)處理器的控制權(quán))出讓給另一個(gè)有相同或更高優(yōu)先級(jí)的線(xiàn)程。--------------------------------------------------------------------------------12.修改優(yōu)先級(jí)pthread_setschedparam#include int pthread_setschedparam(pthread_t tid, int policy, const struct sched_param *param);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。修改線(xiàn)程的優(yōu)先權(quán)。--------------------------------------------------------------------------------13.獲取優(yōu)先級(jí)pthread_getschedparam#include int pthread_getschedparam(pthread_t tid, int policy, struct schedparam *param);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。獲取線(xiàn)程的優(yōu)先級(jí)。--------------------------------------------------------------------------------14.發(fā)送信號(hào)pthread_kill#include int pthread_kill(pthread_t tid, int sig);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。向tid指定的線(xiàn)程發(fā)送一個(gè)信號(hào),tid指定的線(xiàn)程必須和當(dāng)前線(xiàn)程在同一個(gè)進(jìn)程中。當(dāng)sig參數(shù)為0時(shí),函數(shù)將進(jìn)行錯(cuò)誤檢查,不發(fā)送信號(hào),這常常用來(lái)檢查tid的合法性。--------------------------------------------------------------------------------15.設(shè)置線(xiàn)程掩碼pthread_sigmask#include #include int pthread_sigmask(int how, const sigset_t *new, sigset_t *old);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。改變或檢驗(yàn)當(dāng)前線(xiàn)程的信號(hào)掩碼。參數(shù)how表示對(duì)當(dāng)前信號(hào)掩碼進(jìn)行什么操作,有如下值:SIG_BLOCK、SIG_UNBLOCK、SIG_SETMASK。當(dāng)參數(shù)new為NULL時(shí),不論how的值是什么,當(dāng)前線(xiàn)程的信號(hào)掩碼都不會(huì)改變。舊的信號(hào)掩碼保存在參數(shù)old指向的內(nèi)存中,當(dāng)old不為NULL時(shí)。--------------------------------------------------------------------------------16.終止線(xiàn)程pthread_exit#include void pthread_exit(void *status);終止當(dāng)前線(xiàn)程,所有綁定在線(xiàn)程數(shù)據(jù)鍵上的內(nèi)存將被釋放。如果當(dāng)前線(xiàn)程是非分離的,那么這個(gè)線(xiàn)程的標(biāo)示符合退出代碼將被保留,直到其他線(xiàn)程用pthread_join來(lái)等待當(dāng)前線(xiàn)程的終止。如果當(dāng)前線(xiàn)程是分離的,status將被忽略,線(xiàn)程標(biāo)示符將被立即回收。若status不為NULL,線(xiàn)程的退出代碼被置為status參數(shù)指向的值。--------------------------------------------------------------------------------17.退出線(xiàn)程pthread_cancel#include int pthread_cancel(pthread_t thread);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。退出一個(gè)線(xiàn)程。如何響應(yīng)退出請(qǐng)求取決于目標(biāo)線(xiàn)程的狀態(tài)。--------------------------------------------------------------------------------18.允許/禁止退出線(xiàn)程pthread_setcancelstate#include int pthread_setcancelstate(int state, int *oldstate);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。參數(shù)state取值為PTHREAD_CANCEL_ENABLE或PTHREAD_CANCEL_DISABLE。--------------------------------------------------------------------------------19.設(shè)置退出類(lèi)型pthread_setcanceltype#include int pthread_setcanceltype(int type, int *oldtype);返回值:函數(shù)成功返回0。任何其他返回值都表示錯(cuò)誤。將線(xiàn)程退出類(lèi)型設(shè)置為延遲類(lèi)型或異步類(lèi)型。參數(shù)type的取值為PTHREAD_CANCEL_DEFERRED或PTHREAD_CANCEL_ASYNCHRONOUS。當(dāng)一個(gè)線(xiàn)程被創(chuàng)建后,缺省值是延遲類(lèi)型。在異步方式下,線(xiàn)程可以在執(zhí)行的任何時(shí)候被退出。--------------------------------------------------------------------------------20.創(chuàng)建退出點(diǎn)pthread_testcancel#include void pthread_testcancel(void);無(wú)返回值。設(shè)置線(xiàn)程的退出點(diǎn)。只有當(dāng)線(xiàn)程的退出狀態(tài)是允許退出的,而且線(xiàn)程的退出類(lèi)型是延遲時(shí),調(diào)用該函數(shù)才有效。如果調(diào)用時(shí)線(xiàn)程的退出狀態(tài)是禁止的,則該調(diào)用不起作用。小心使用該函數(shù),只有在能夠安全的被退出的地方才能夠設(shè)置退出點(diǎn)。--------------------------------------------------------------------------------21.壓入善后處理函數(shù)#include void pthread_cleanup_push(void (*routine)(void *), void *args);將一個(gè)善后處理函數(shù)壓入善后處理函數(shù)堆棧。--------------------------------------------------------------------------------22.彈出善后處理函數(shù)#include void pthread_cleanup_pop(int execute);從善后處理函數(shù)堆棧中彈出一個(gè)善后處理函數(shù)。如果參數(shù)execute非0,則執(zhí)行彈出的函數(shù);如果參數(shù)為0,則不執(zhí)行彈出函數(shù)。如果一個(gè)線(xiàn)程顯式或隱式的調(diào)用pthread_exit()函數(shù)或線(xiàn)程接受了退出請(qǐng)求,線(xiàn)程庫(kù)實(shí)際上將會(huì)以非0參數(shù)調(diào)用pthread_cleanup_pop函數(shù)。轉(zhuǎn)自:http://blog.chinaunix.net/space.php?uid=13760159&do=blog&cuid=1225657
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美日韩视频在线第一区 | 日韩中文一区二区三区 | av日韩在线播放 | 爱福利视频 | 欧美高清一区二区 | 久久精品亚洲精品 | 黄色片网址 | 激情国产| 午夜影院免费 | 精品久久一区二区三区 | 黄色网址免费在线观看 | 精品国产依人香蕉在线精品 | 欧美精产国品一二三区 | 日韩成人一区二区 | 少妇一区二区三区毛片免费下载看 | 久久品 | 欧美性吧| 国产精品视频久久 | 电影91久久久| 亚洲黄色在线观看 | 91伊人网 | 成人av一区二区三区 | 日日av拍夜夜添久久免费 | 一级黄网 | a∨在线观看 | 在线日韩视频 | 国产在线激情 | 国产亚洲一区二区av | 欧美日韩在线免费观看 | 日韩一区二区不卡 | 正在播放国产一区二区 | 亚洲一区二区在线播放 | 国产精品国产三级国产aⅴ无密码 | 蜜臀av在线播放一区二区三区 | 成av在线 | 国产又粗又长又硬又猛电影 | 性色av一区二区三区免费看开蚌 | 亚洲精品国产一区 | 国产成人午夜精品5599 | 在线亚洲成人 | 青草青草视频2免费观看 |