欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
線(xiàn)程基本編程
標  題: [轉載]線(xiàn)程基本編程
發(fā)信站: 武漢白云黃鶴站 (2006年06月21日10:39:44 星期三)

線(xiàn)程基本編程
轉自 http://www.rehai.cn/duangw/computer/pthread/basic.html#item003


索引:
1.創(chuàng )建線(xiàn)程pthread_create
2.等待線(xiàn)程結束pthread_join
3.分離線(xiàn)程pthread_detach
4.創(chuàng )建線(xiàn)程鍵pthread_key_create
5.刪除線(xiàn)程鍵pthread_key_delete
6.設置線(xiàn)程數據pthread_setspecific
7.獲取線(xiàn)程數據pthread_getspecific
8.獲取線(xiàn)程標示符pthread_self
9.比較線(xiàn)程pthread_equal
10.一次執行pthread_once
11.出讓執行權sched_yield
12.修改優(yōu)先級pthread_setschedparam
13.獲取優(yōu)先級pthread_getschedparam
14.發(fā)送信號pthread_kill
15.設置線(xiàn)程掩碼pthread_sigmask
16.終止線(xiàn)程pthread_exit
17.退出線(xiàn)程pthread_cancel
18.允許/禁止退出線(xiàn)程pthread_setcancelstate
19.設置退出類(lèi)型pthread_setcanceltype
20.創(chuàng )建退出點(diǎn)pthread_testcancel
21.壓入善后處理函數
22.彈出善后處理函數



------------------------------------------------------------------------------
--


1.創(chuàng )建線(xiàn)程pthread_create
#include <pthread.h>
int pthread_create(pthread_t *tid, const pthread_attr_t *tattr, void *(*start_
routine)(void *), void *arg);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

創(chuàng )建一個(gè)線(xiàn)程。


參數tattr中含有初始化線(xiàn)程所需要的屬性,start_routine是線(xiàn)程入口函數的地址,當st
art_routine返回時(shí),相應的線(xiàn)程就結束了。


當函數成功時(shí),線(xiàn)程標示符保存在參數tid指向的內存中。


如果不指定屬性對象,將其置為NULL,則創(chuàng )建一個(gè)缺省的線(xiàn)程,有如下屬性:


非綁定的;
未分離的;
由一個(gè)缺省大小的堆棧;
具有和父線(xiàn)程一樣的優(yōu)先級。
注意:在創(chuàng )建子線(xiàn)程時(shí),傳給子線(xiàn)程的輸入參數最好是由malloc()函數返回的指針或指向
全局變量的指針,而不要是指向局部變量的指針。要保證子線(xiàn)程處理參數時(shí),該區域仍然
有效。

------------------------------------------------------------------------------
--

2.等待線(xiàn)程結束pthread_join
#include <pthread.h>
int pthread_join(pthread_t tid, void **status);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

等待一個(gè)線(xiàn)程結束。


該函數阻塞調用它線(xiàn)程,直到參數tid指定的線(xiàn)程結束。


tid指定的線(xiàn)程必須在當前進(jìn)程中,同時(shí)tid指定的線(xiàn)程必須是非分離的。


不能有多個(gè)線(xiàn)程等待同一個(gè)線(xiàn)程終止。如果出現這種情況,一個(gè)線(xiàn)程將成功返回,別的線(xiàn)
程將返回錯誤ESRCH。


如果參數status不為NULL,則將線(xiàn)程的退出狀態(tài)放在status指向的內存中。



------------------------------------------------------------------------------
--

3.分離線(xiàn)程pthread_detach
#include <pthread.h>
int pthread_detach(pthread_t tid);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

將非分離的線(xiàn)程設置為分離線(xiàn)程。即通知線(xiàn)程庫在指定的線(xiàn)程終止時(shí)回收線(xiàn)程占用的內存
等資源。


在一個(gè)線(xiàn)程上使用多次pthread_detach的結果是不可預見(jiàn)的。



------------------------------------------------------------------------------
--

4.創(chuàng )建線(xiàn)程鍵pthread_key_create
#include <pthread.h>
int pthread_key_create(pthread_key_t *key, void (*destructor)(void*));
返回值:函數成功返回0。任何其他返回值都表示錯誤。

在進(jìn)程中分配一個(gè)鍵值,這個(gè)鍵被用來(lái)表示一個(gè)線(xiàn)程數據項。這個(gè)鍵對進(jìn)程中所有的線(xiàn)程
都是可見(jiàn)的。剛創(chuàng )建線(xiàn)程數據鍵時(shí),在所有線(xiàn)程中和這個(gè)鍵相關(guān)聯(lián)的值都是NULL。


函數成功返回后,分配的鍵放在key參數指向的內存中,必須保證key參數指向的內存區的
有效性。


如果指定了解析函數destructor,那么當線(xiàn)程結束時(shí)并且將非空的值綁定在這個(gè)鍵上,系
統將調用destructor函數,參數就是相關(guān)線(xiàn)程與這個(gè)鍵綁定的值。綁定在這個(gè)鍵上的內存
塊可由destructor函數釋放。



------------------------------------------------------------------------------
--

5.刪除線(xiàn)程鍵pthread_key_delete
#include <pthread.h>
int pthread_key_delete(pthread_key_t key);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

刪除線(xiàn)程數據鍵。這個(gè)鍵占用的內存將被釋放,該鍵再被引用將返回錯誤。


在調用該函數之前,程序必須釋放和本線(xiàn)程相關(guān)聯(lián)的資源,該函數不會(huì )引發(fā)線(xiàn)程數據鍵的
解析函數。



------------------------------------------------------------------------------
--

6.設置線(xiàn)程數據pthread_setspecific
#include <pthread.h>
int pthread_setspecific(pthread_key_t key, const void *value);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

設置和某個(gè)線(xiàn)程數據鍵綁定在一起的線(xiàn)程專(zhuān)用數據(一般是指針)。


函數不會(huì )釋放原來(lái)綁定在鍵上的內存,給一個(gè)鍵值綁定新的指針時(shí),必須釋放原指針指向
的內存,否則會(huì )發(fā)生內存泄漏。



------------------------------------------------------------------------------
--

7.獲取線(xiàn)程數據pthread_getspecific
#include <pthread.h>
void pthread_getspecific(pthread_key_t key, void **value);
無(wú)返回值。出錯時(shí)value指向NULL。

獲取綁定在線(xiàn)程數據鍵上的值,并在指定的位置存儲取來(lái)的值。



------------------------------------------------------------------------------
--

8.獲取線(xiàn)程標示符pthread_self
#include <pthread.h>
pthread_t pthread_self(void);

返回當前線(xiàn)程的標示符。



------------------------------------------------------------------------------
--

9.比較線(xiàn)程pthread_equal
#include <pthread.h>
int pthread_equal(pthread_t tid1, pthread_t tid2);
如果tid1和tid2相同,函數返回一個(gè)非0值,否則返回0。

如果tid1或tid2中任何一個(gè)是非法值,則返回將是不可預料的。



------------------------------------------------------------------------------
--

10.一次執行pthread_once
#include <pthread.h>
int pthread_once(pthread_once_t *once_control, void (*init_routine)(void));
返回值:函數成功返回0。任何其他返回值都表示錯誤。

函數用來(lái)調用初始化函數。如果已經(jīng)有線(xiàn)程通過(guò)pthread_once調用過(guò)這個(gè)初始化函數一次
,那么以后通過(guò)pthread_once函數再調用這個(gè)初始化函數將無(wú)效。


參數once_control決定了相應的初始化函數是否被調用過(guò)。它一般如下使用:
[static] pthread_once_t once_control = PTHREAD_ONCE_INIT。



------------------------------------------------------------------------------
--

11.出讓執行權sched_yield
#include
int sched_yield(void);
返回值:函數成功返回0。-1表示錯誤。

把當前線(xiàn)程的執行權(即對處理器的控制權)出讓給另一個(gè)有相同或更高優(yōu)先級的線(xiàn)程。




------------------------------------------------------------------------------
--

12.修改優(yōu)先級pthread_setschedparam
#include <pthread.h>
int pthread_setschedparam(pthread_t tid, int policy, const struct sched_param
*param);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

修改線(xiàn)程的優(yōu)先權。



------------------------------------------------------------------------------
--

13.獲取優(yōu)先級pthread_getschedparam
#include <pthread.h>
int pthread_getschedparam(pthread_t tid, int policy, struct schedparam *param)
;
返回值:函數成功返回0。任何其他返回值都表示錯誤。

獲取線(xiàn)程的優(yōu)先級。



------------------------------------------------------------------------------
--

14.發(fā)送信號pthread_kill
#include <pthread.h>
int pthread_kill(pthread_t tid, int sig);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

向tid指定的線(xiàn)程發(fā)送一個(gè)信號,tid指定的線(xiàn)程必須和當前線(xiàn)程在同一個(gè)進(jìn)程中。


當sig參數為0時(shí),函數將進(jìn)行錯誤檢查,不發(fā)送信號,這常常用來(lái)檢查tid的合法性。



------------------------------------------------------------------------------
--

15.設置線(xiàn)程掩碼pthread_sigmask
#include <pthread.h>
#include <signal.h>
int pthread_sigmask(int how, const sigset_t *new, sigset_t *old);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

改變或檢驗當前線(xiàn)程的信號掩碼。


參數how表示對當前信號掩碼進(jìn)行什么操作,有如下值:SIG_BLOCK、SIG_UNBLOCK、SIG_S
ETMASK。


當參數new為NULL時(shí),不論how的值是什么,當前線(xiàn)程的信號掩碼都不會(huì )改變。


舊的信號掩碼保存在參數old指向的內存中,當old不為NULL時(shí)。



------------------------------------------------------------------------------
--

16.終止線(xiàn)程pthread_exit
#include <pthread.h>
void pthread_exit(void *status);

終止當前線(xiàn)程,所有綁定在線(xiàn)程數據鍵上的內存將被釋放。如果當前線(xiàn)程是非分離的,那
么這個(gè)線(xiàn)程的標示符合退出代碼將被保留,直到其他線(xiàn)程用pthread_join來(lái)等待當前線(xiàn)程
的終止。如果當前線(xiàn)程是分離的,status將被忽略,線(xiàn)程標示符將被立即回收。


若status不為NULL,線(xiàn)程的退出代碼被置為status參數指向的值。



------------------------------------------------------------------------------
--

17.退出線(xiàn)程pthread_cancel
#include <pthread.h>
int pthread_cancel(pthread_t thread);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

退出一個(gè)線(xiàn)程。如何響應退出請求取決于目標線(xiàn)程的狀態(tài)。



------------------------------------------------------------------------------
--

18.允許/禁止退出線(xiàn)程pthread_setcancelstate
#include <pthread.h>
int pthread_setcancelstate(int state, int *oldstate);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

參數state取值為PTHREAD_CANCEL_ENABLE或PTHREAD_CANCEL_DISABLE。



------------------------------------------------------------------------------
--

19.設置退出類(lèi)型pthread_setcanceltype
#include <pthread.h>
int pthread_setcanceltype(int type, int *oldtype);
返回值:函數成功返回0。任何其他返回值都表示錯誤。

將線(xiàn)程退出類(lèi)型設置為延遲類(lèi)型或異步類(lèi)型。參數type的取值為PTHREAD_CANCEL_DEFERRE
D或PTHREAD_CANCEL_ASYNCHRONOUS。


當一個(gè)線(xiàn)程被創(chuàng )建后,缺省值是延遲類(lèi)型。在異步方式下,線(xiàn)程可以在執行的任何時(shí)候被
退出。



------------------------------------------------------------------------------
--

20.創(chuàng )建退出點(diǎn)pthread_testcancel
#include <pthread.h>
void pthread_testcancel(void);
無(wú)返回值。

設置線(xiàn)程的退出點(diǎn)。


只有當線(xiàn)程的退出狀態(tài)是允許退出的,而且線(xiàn)程的退出類(lèi)型是延遲時(shí),調用該函數才有效
。如果調用時(shí)線(xiàn)程的退出狀態(tài)是禁止的,則該調用不起作用。


小心使用該函數,只有在能夠安全的被退出的地方才能夠設置退出點(diǎn)。



------------------------------------------------------------------------------
--

21.壓入善后處理函數
#include <pthread.h>
void pthread_cleanup_push(void (*routine)(void *), void *args);

將一個(gè)善后處理函數壓入善后處理函數堆棧。



------------------------------------------------------------------------------
--

22.彈出善后處理函數
#include <pthread.h>
void pthread_cleanup_pop(int execute);

從善后處理函數堆棧中彈出一個(gè)善后處理函數。如果參數execute非0,則執行彈出的函數
;如果參數為0,則不執行彈出函數。


如果一個(gè)線(xiàn)程顯式或隱式的調用pthread_exit()函數或線(xiàn)程接受了退出請求,線(xiàn)程庫實(shí)際
上將會(huì )以非0參數調用pthread_cleanup_pop函數。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
線(xiàn)程私有數據(TSD)
C++ 多線(xiàn)程
pthread_create
##多線(xiàn)程的使用示例
pthread線(xiàn)程使用小結
Linux操作系統下實(shí)現多線(xiàn)程客戶(hù)/服務(wù)器
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久