青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

線程基本編程——線程函數大全

Posted on 2009-11-18 17:18 Prayer 閱讀(951) 評論(0)  編輯 收藏 引用 所屬分類: LINUX/UNIX/AIX
線程基本編程
                                               
                                               
                                                                                                                                                                                                                        線程基本編程
索引:
1.創建線程pthread_create
2.等待線程結束pthread_join
3.分離線程pthread_detach
4.創建線程鍵pthread_key_create
5.刪除線程鍵pthread_key_delete
6.設置線程數據pthread_setspecific
7.獲取線程數據pthread_getspecific
8.獲取線程標示符pthread_self
9.比較線程pthread_equal
10.一次執行pthread_once
11.出讓執行權sched_yield
12.修改優先級pthread_setschedparam
13.獲取優先級pthread_getschedparam
14.發送信號pthread_kill
15.設置線程掩碼pthread_sigmask
16.終止線程pthread_exit
17.退出線程pthread_cancel
18.允許/禁止退出線程pthread_setcancelstate
19.設置退出類型pthread_setcanceltype
20.創建退出點pthread_testcancel
21.壓入善后處理函數
22.彈出善后處理函數
--------------------------------------------------------------------------------
1.創建線程pthread_create
#include
int pthread_create(pthread_t *tid, const pthread_attr_t *tattr, void *(*start_routine)(void *), void *arg);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
創建一個線程。
參數tattr中含有初始化線程所需要的屬性,start_routine是線程入口函數的地址,當start_routine返回時,相應的線程就結束了。
當函數成功時,線程標示符保存在參數tid指向的內存中。
如果不指定屬性對象,將其置為NULL,則創建一個缺省的線程,有如下屬性:
非綁定的;
未分離的;
由一個缺省大小的堆棧;
具有和父線程一樣的優先級。
注意:在創建子線程時,傳給子線程的輸入參數最好是由malloc()函數返回的指針或指向全局變量的指針,而不要是指向局部變量的指針。要保證子線程處理參數時,該區域仍然有效。
--------------------------------------------------------------------------------
2.等待線程結束pthread_join
#include
int pthread_join(pthread_t tid, void **status);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
等待一個線程結束。
該函數阻塞調用它線程,直到參數tid指定的線程結束。
tid指定的線程必須在當前進程中,同時tid指定的線程必須是非分離的。
不能有多個線程等待同一個線程終止。如果出現這種情況,一個線程將成功返回,別的線程將返回錯誤ESRCH。
如果參數status不為NULL,則將線程的退出狀態放在status指向的內存中。
--------------------------------------------------------------------------------
3.分離線程pthread_detach
#include
int pthread_detach(pthread_t tid);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
將非分離的線程設置為分離線程。即通知線程庫在指定的線程終止時回收線程占用的內存等資源。
在一個線程上使用多次pthread_detach的結果是不可預見的。
--------------------------------------------------------------------------------
4.創建線程鍵pthread_key_create
#include
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));
返回值:函數成功返回0。任何其他返回值都表示錯誤。
在進程中分配一個鍵值,這個鍵被用來表示一個線程數據項。這個鍵對進程中所有的線程都是可見的。剛創建線程數據鍵時,在所有線程中和這個鍵相關聯的值都是NULL。
函數成功返回后,分配的鍵放在key參數指向的內存中,必須保證key參數指向的內存區的有效性。
如果指定了解析函數destructor,那么當線程結束時并且將非空的值綁定在這個鍵上,系統將調用destructor函數,參數就是相關線程與這個鍵綁定的值。綁定在這個鍵上的內存塊可由destructor函數釋放。
--------------------------------------------------------------------------------
5.刪除線程鍵pthread_key_delete
#include
int pthread_key_delete(pthread_key_t key);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
刪除線程數據鍵。這個鍵占用的內存將被釋放,該鍵再被引用將返回錯誤。
在調用該函數之前,程序必須釋放和本線程相關聯的資源,該函數不會引發線程數據鍵的解析函數。
--------------------------------------------------------------------------------
6.設置線程數據pthread_setspecific
#include
int pthread_setspecific(pthread_key_t key, const void *value);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
設置和某個線程數據鍵綁定在一起的線程專用數據(一般是指針)。
函數不會釋放原來綁定在鍵上的內存,給一個鍵值綁定新的指針時,必須釋放原指針指向的內存,否則會發生內存泄漏。
--------------------------------------------------------------------------------
7.獲取線程數據pthread_getspecific
#include
void pthread_getspecific(pthread_key_t key, void **value);
無返回值。出錯時value指向NULL。
獲取綁定在線程數據鍵上的值,并在指定的位置存儲取來的值。
--------------------------------------------------------------------------------
8.獲取線程標示符pthread_self
#include
pthread_t pthread_self(void);
返回當前線程的標示符。
--------------------------------------------------------------------------------
9.比較線程pthread_equal
#include
int pthread_equal(pthread_t tid1, pthread_t tid2);
如果tid1和tid2相同,函數返回一個非0值,否則返回0。
如果tid1或tid2中任何一個是非法值,則返回將是不可預料的。
--------------------------------------------------------------------------------
10.一次執行pthread_once
#include
int pthread_once(pthread_once_t *once_control, void (*init_routine)(void));
返回值:函數成功返回0。任何其他返回值都表示錯誤。
函數用來調用初始化函數。如果已經有線程通過pthread_once調用過這個初始化函數一次,那么以后通過pthread_once函數再調用這個初始化函數將無效。
參數once_control決定了相應的初始化函數是否被調用過。它一般如下使用:
[static] pthread_once_t once_control = PTHREAD_ONCE_INIT。
--------------------------------------------------------------------------------
11.出讓執行權sched_yield
#include
int sched_yield(void);
返回值:函數成功返回0。-1表示錯誤。
把當前線程的執行權(即對處理器的控制權)出讓給另一個有相同或更高優先級的線程。
--------------------------------------------------------------------------------
12.修改優先級pthread_setschedparam
#include
int pthread_setschedparam(pthread_t tid, int policy, const struct sched_param *param);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
修改線程的優先權。
--------------------------------------------------------------------------------
13.獲取優先級pthread_getschedparam
#include
int pthread_getschedparam(pthread_t tid, int policy, struct schedparam *param);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
獲取線程的優先級。
--------------------------------------------------------------------------------
14.發送信號pthread_kill
#include
int pthread_kill(pthread_t tid, int sig);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
向tid指定的線程發送一個信號,tid指定的線程必須和當前線程在同一個進程中。
當sig參數為0時,函數將進行錯誤檢查,不發送信號,這常常用來檢查tid的合法性。
--------------------------------------------------------------------------------
15.設置線程掩碼pthread_sigmask
#include
#include
int pthread_sigmask(int how, const sigset_t *new, sigset_t *old);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
改變或檢驗當前線程的信號掩碼。
參數how表示對當前信號掩碼進行什么操作,有如下值:SIG_BLOCK、SIG_UNBLOCK、SIG_SETMASK。
當參數new為NULL時,不論how的值是什么,當前線程的信號掩碼都不會改變。
舊的信號掩碼保存在參數old指向的內存中,當old不為NULL時。
--------------------------------------------------------------------------------
16.終止線程pthread_exit
#include
void pthread_exit(void *status);
終止當前線程,所有綁定在線程數據鍵上的內存將被釋放。如果當前線程是非分離的,那么這個線程的標示符合退出代碼將被保留,直到其他線程用pthread_join來等待當前線程的終止。如果當前線程是分離的,status將被忽略,線程標示符將被立即回收。
若status不為NULL,線程的退出代碼被置為status參數指向的值。
--------------------------------------------------------------------------------
17.退出線程pthread_cancel
#include
int pthread_cancel(pthread_t thread);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
退出一個線程。如何響應退出請求取決于目標線程的狀態。
--------------------------------------------------------------------------------
18.允許/禁止退出線程pthread_setcancelstate
#include
int pthread_setcancelstate(int state, int *oldstate);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
參數state取值為PTHREAD_CANCEL_ENABLE或PTHREAD_CANCEL_DISABLE。
--------------------------------------------------------------------------------
19.設置退出類型pthread_setcanceltype
#include
int pthread_setcanceltype(int type, int *oldtype);
返回值:函數成功返回0。任何其他返回值都表示錯誤。
將線程退出類型設置為延遲類型或異步類型。參數type的取值為PTHREAD_CANCEL_DEFERRED或PTHREAD_CANCEL_ASYNCHRONOUS。
當一個線程被創建后,缺省值是延遲類型。在異步方式下,線程可以在執行的任何時候被退出。
--------------------------------------------------------------------------------
20.創建退出點pthread_testcancel
#include
void pthread_testcancel(void);
無返回值。
設置線程的退出點。
只有當線程的退出狀態是允許退出的,而且線程的退出類型是延遲時,調用該函數才有效。如果調用時線程的退出狀態是禁止的,則該調用不起作用。
小心使用該函數,只有在能夠安全的被退出的地方才能夠設置退出點。
--------------------------------------------------------------------------------
21.壓入善后處理函數
#include
void pthread_cleanup_push(void (*routine)(void *), void *args);
將一個善后處理函數壓入善后處理函數堆棧。
--------------------------------------------------------------------------------
22.彈出善后處理函數
#include
void pthread_cleanup_pop(int execute);
從善后處理函數堆棧中彈出一個善后處理函數。如果參數execute非0,則執行彈出的函數;如果參數為0,則不執行彈出函數。
如果一個線程顯式或隱式的調用pthread_exit()函數或線程接受了退出請求,線程庫實際上將會以非0參數調用pthread_cleanup_pop函數。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美日韩精品综合在线观看| 欧美激情亚洲| 1024成人| 亚洲国产日韩欧美在线图片| 亚洲国产成人av好男人在线观看| 国内揄拍国内精品少妇国语| 极品av少妇一区二区| 黄色成人在线网址| 亚洲精品日韩在线| 一区二区三区不卡视频在线观看| 一区二区精品在线观看| 香蕉久久夜色精品国产| 久久久久久9999| 亚洲第一区中文99精品| 亚洲国产综合91精品麻豆| 99精品视频免费观看视频| 亚洲视频中文字幕| 久久精品人人做人人爽电影蜜月| 欧美**字幕| 国产精品久久久久9999吃药| 国产一区二区三区精品久久久| 在线精品视频一区二区三四| 99精品欧美一区二区三区综合在线 | 欧美在线高清视频| 麻豆成人在线观看| 一本不卡影院| 久久久九九九九| 欧美日韩免费观看一区三区| 国产伊人精品| 亚洲在线视频观看| 免费黄网站欧美| 亚洲视频网站在线观看| 久久亚洲不卡| 欧美午夜视频| 日韩视频在线观看| 葵司免费一区二区三区四区五区| 在线视频中文亚洲| 欧美黄色一区| 在线观看日韩av| 欧美主播一区二区三区美女 久久精品人| 欧美xx视频| 久久精品人人爽| 国产日韩精品久久| 在线综合亚洲欧美在线视频| 免费成人美女女| 久久国产精品亚洲va麻豆| 国产精品电影在线观看| 一区二区精品| 亚洲国产精品久久久久秋霞不卡 | 久久久最新网址| 在线视频中文亚洲| 在线播放豆国产99亚洲| 亚洲伊人网站| 亚洲精品乱码久久久久久黑人 | 欧美 日韩 国产 一区| 午夜精品久久久久久久久久久| 欧美日本在线一区| 日韩小视频在线观看| 免费一级欧美片在线播放| 久久国产精品99久久久久久老狼| 国产精品系列在线播放| 亚洲欧美国产精品专区久久| a4yy欧美一区二区三区| 欧美日韩国产一区二区三区| 亚洲美女视频在线观看| 亚洲美女免费视频| 欧美日韩不卡一区| 亚洲视频在线播放| 一区二区三区 在线观看视频| 欧美日韩免费| 久久国产精品久久w女人spa| 先锋影音久久| 伊人成人开心激情综合网| 噜噜噜噜噜久久久久久91| 久久久免费av| 日韩性生活视频| 亚洲中无吗在线| 国际精品欧美精品| 欧美韩国日本综合| 欧美日韩国产在线播放| 亚洲欧美综合| 久久九九热免费视频| 亚洲品质自拍| 亚洲私人影院| 在线播放亚洲一区| 亚洲精品在线免费| 国产精品丝袜xxxxxxx| 欧美va亚洲va香蕉在线| 欧美日韩精品系列| 久久国产精品第一页| 欧美成人一区二区在线| 亚洲一区二区三区高清不卡| 午夜国产欧美理论在线播放| 在线观看亚洲| 亚洲午夜精品国产| 1000精品久久久久久久久| 一本一本久久a久久精品综合麻豆| 国产精品夜夜夜| 亚洲国产老妈| 国产一区日韩欧美| 99视频在线观看一区三区| 国模私拍一区二区三区| 亚洲日本va午夜在线电影| 国产区在线观看成人精品| 亚洲第一精品夜夜躁人人爽 | 国产精品私房写真福利视频| 久久久www| 亚洲综合电影| 免费观看欧美在线视频的网站| 亚洲视频自拍偷拍| 久久亚洲国产成人| 午夜精品久久久久久久久久久久久 | 国产精品免费电影| 亚洲盗摄视频| 在线电影国产精品| 亚洲一区二区三区国产| 亚洲精品日本| 久久人人97超碰国产公开结果| 午夜视频一区二区| 欧美三级午夜理伦三级中视频| 牛牛精品成人免费视频| 国产一区二区三区自拍| 亚洲无限av看| 亚洲在线观看视频网站| 欧美精品精品一区| 亚洲高清色综合| 亚洲国产精品一区二区三区| 亚洲欧美怡红院| 欧美一区精品| 国产女主播一区二区三区| 一区二区三区久久精品| 夜夜嗨av一区二区三区四区| 欧美不卡视频一区| 欧美电影免费观看高清完整版| 黑人操亚洲美女惩罚| 午夜精品福利一区二区蜜股av| 亚洲——在线| 国产精品久久看| 亚洲字幕在线观看| 午夜视频一区在线观看| 国产精品嫩草99a| 亚洲视频网站在线观看| 午夜精品视频一区| 国产午夜精品久久久| 久久精品国产一区二区三区| 久久亚洲一区二区三区四区| 在线电影国产精品| 欧美电影在线| 一区二区三区欧美日韩| 午夜视频精品| 一区在线视频观看| 欧美1区免费| 夜夜嗨av一区二区三区网站四季av| 亚洲视频免费在线| 国产欧美一区二区三区视频| 久久国产精品99精品国产| 美日韩在线观看| 99精品福利视频| 国产精品久久久久永久免费观看 | 欧美影院成年免费版| 久久男人av资源网站| 91久久在线视频| 国产精品第一区| 久久高清国产| 亚洲精品在线三区| 久久久精品欧美丰满| 亚洲精品在线视频观看| 国产精品久久久久久户外露出| 欧美在线亚洲| 亚洲美女一区| 欧美成人黑人xx视频免费观看 | 亚洲国产精品久久久久婷婷884 | 欧美xart系列高清| 亚洲激情影视| 欧美一区二粉嫩精品国产一线天| 国内揄拍国内精品久久| 欧美女主播在线| 午夜精品网站| 亚洲人成高清| 久久aⅴ国产紧身牛仔裤| 亚洲激情影视| 国产日韩欧美二区| 欧美黄色一区| 久久青草欧美一区二区三区| 一区二区三区国产在线观看| 欧美成人精品| 久久se精品一区二区| 99精品国产一区二区青青牛奶| 国模精品娜娜一二三区| 欧美日韩在线免费视频| 久久综合成人精品亚洲另类欧美| 亚洲九九爱视频| 欧美va亚洲va国产综合| 久久狠狠久久综合桃花| 亚洲视频一区| 日韩午夜av在线| 亚洲人成7777| 亚洲国产成人精品久久久国产成人一区| 国产精品日本精品| 欧美三级网址|