天天看點

建立線程:pthread_create

int pthread_create((pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)

若線程建立成功,則傳回0。若線程建立失敗,則傳回出錯編号,并且*thread中的内容是未定義的

int pthread_join(pthread_t thread, void **retval);

以阻塞的方式等待thread指定的線程結束。當函數傳回時,被等待線程的資源被收回。如果線程已經結束,那麼該函數會立即傳回。并且thread指定的線程必須是joinable的

int pthread_detach(pthread_t tid);

調用pthread_join(pthread_id)後,如果該線程沒有運作結束,調用者會被阻塞,在有些情況下我們并不希望如此,比如在Web伺服器中當主線程為每個新來的連結建立一個子線程進行處理的時候,主線程并不希望因為調用pthread_join而阻塞(因為還要繼續處理之後到來的連結),這時可以在子線程中加入代碼pthread_detach(pthread_self())或者父線程調用pthread_detach(thread_id)(非阻塞,可立即傳回)

pthread_t pthread_self(void);

獲得線程自身的ID。pthread_t的類型為unsigned long int,是以在列印的時候要使用%lu方式,否則顯示結果出問題。

void pthread_exit(void* retval);

線程通過調用pthread_exit函數終止執行,就如同程序在結束時調用exit函數一樣。這個函數的作用是,終止調用它的線程并傳回一個指向某個對象的指針。

int pthread_cancel(pthread_t thread)

發送終止信号給thread線程,如果成功則傳回0,否則為非0值。發送成功并不意味着thread會終止。

http://www.cnblogs.com/lijunamneg/archive/2013/01/25/2877211.html

int pthread_attr_init(pthread_attr_t *attr);

int pthread_attr_destroy(pthread_attr_t *attr);

作用是初始化一個線程對象的屬性,需要用pthread_attr_destroy函數對其去除初始化。

Posix線程中的線程屬性pthread_attr_t主要包括scope屬性、detach屬性、堆棧位址、堆棧大小、優先級。

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);

attr 是線程屬性變量;stacksize 則是設定的堆棧大小。 傳回值0,-1分别表示成功與失敗。

堆棧最小值定義為 PTHREAD_STACK_MIN ,包含#include <limits.h>後可以通過列印其值檢視。對于預設值可以通過pthread_attr_getstacksize (&attr, &stack_size); 列印stack_size來檢視。

int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);

設定線程排程政策;POSIX 标準指定了三種排程政策:先入先出政策 (SCHED_FIFO)、循環政策 (SCHED_RR) 和自定義政策 (SCHED_OTHER)。SCHED_FIFO 是基于隊列的排程程式,對于每個優先級都會使用不同的隊列。SCHED_RR 與 FIFO 相似,不同的是前者的每個線程都有一個執行時間配額。SCHED_FIFO 和 SCHED_RR 是對 POSIX Realtime 的擴充。SCHED_OTHER 是預設的排程政策。

int pthread_attr_setscope (pthread_attr_t* attr, int scope);

POSIX的标準中定義了兩個值:PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS,前者表示與系統中所有線程一起競争CPU時間,後者表示僅與同程序中的線程競争CPU。預設為PTHREAD_SCOPE_PROCESS。

int pthread_attr_setdetachstate (pthread_attr_t* attr, int detachstate);

該表示新線程是否與程序中其他線程脫離同步,如果設定為PTHREAD_CREATE_DETACHED則新線程不能用pthread_join()來同步,且在退出時自行釋放所占用的資源。預設為PTHREAD_CREATE_JOINABLE狀态。這個屬性也可以線上程建立并運作以後用pthread_detach()來設定,而一旦設定為PTHREAD_CREATE_DETACH狀态(不論是建立時設定還是運作時設定)則不能再恢複到PTHREAD_CREATE_JOINABLE狀态。

int pthread_attr_setschedparam (pthread_attr_t* attr, struct sched_param* param);

int pthread_attr_getschedparam (pthread_attr_t* attr, struct sched_param* param);

一個struct sched_param結構,目前僅有一個sched_priority整型變量表示線程的運作優先級。這個參數僅當排程政策為實時(即SCHED_RR或SCHED_FIFO)時才有效,并可以在運作時通過pthread_setschedparam()函數來改變,預設為0

int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param)

用于設定線程的調用政策和優先級。

int pthread_attr_getinheritsched(const pthread_attr_t *attr,int *inheritsched);

int pthread_attr_setinheritsched(pthread_attr_t *attr,int inheritsched);

設定線程的繼承屬性,PTHREAD_INHERIT_SCHED: 新的線程繼承建立線程的政策和參數;PTHREAD_EXPLICIT_SCHED:新的線程繼承政策和參數顯示指定。

繼續閱讀