线程属性 pthread_attr_t
生活随笔
收集整理的這篇文章主要介紹了
线程属性 pthread_attr_t
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
參考資料:
https://blog.csdn.net/hudashi/article/details/7709413
?
Posix線程中的線程屬性pthread_attr_t主要包括scope屬性、detach屬性、堆棧地址、堆棧大小、優(yōu)先級。在pthread_create中,把第二個參數(shù)設置為NULL的話,將采用默認的屬性配置。
pthread_attr_t的主要屬性的意義如下: __detachstate,表示新線程是否與進程中其他線程脫離同步,?如果設置為PTHREAD_CREATE_DETACHED?則新線程不能用pthread_join()來同步,且在退出時自行釋放所占用的資源。缺省為PTHREAD_CREATE_JOINABLE狀態(tài)。這個屬性也可以在線程創(chuàng)建并運行以后用pthread_detach()來設置,而一旦設置為PTHREAD_CREATE_DETACH狀態(tài)(不論是創(chuàng)建時設置還是運行時設置)則不能再恢復到PTHREAD_CREATE_JOINABLE狀態(tài)。 __schedpolicy,表示新線程的調(diào)度策略,主要包括SCHED_OTHER(正常、非實時)、SCHED_RR(實時、輪轉(zhuǎn)法)和SCHED_FIFO(實時、先入先出)三種,缺省為SCHED_OTHER,后兩種調(diào)度策略僅對超級用戶有效。運行時可以用過pthread_setschedparam()來改變。 __schedparam,一個struct sched_param結(jié)構(gòu),目前僅有一個sched_priority整型變量表示線程的運行優(yōu)先級。這個參數(shù)僅當調(diào)度策略為實時(即SCHED_RR或SCHED_FIFO)時才有效,并可以在運行時通過pthread_setschedparam()函數(shù)來改變,缺省為0。 __inheritsched,有兩種值可供選擇:PTHREAD_EXPLICIT_SCHED和PTHREAD_INHERIT_SCHED,前者表示新線程使用顯式指定調(diào)度策略和調(diào)度參數(shù)(即attr中的值),而后者表示繼承調(diào)用者線程的值。缺省為PTHREAD_EXPLICIT_SCHED。 __scope,表示線程間競爭CPU的范圍,也就是說線程優(yōu)先級的有效范圍。POSIX的標準中定義了兩個值:PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS,前者表示與系統(tǒng)中所有線程一起競爭CPU時間,后者表示僅與同進程中的線程競爭CPU。目前LinuxThreads僅實現(xiàn)了PTHREAD_SCOPE_SYSTEM一值。 為了設置這些屬性,POSIX定義了一系列屬性設置函數(shù),包括pthread_attr_init()、pthread_attr_destroy()和與各個屬性相關(guān)的pthread_attr_getXXX/pthread_attr_setXXX函數(shù)。 在設置線程屬性?pthread_attr_t?之前,通常先調(diào)用pthread_attr_init來初始化,之后來調(diào)用相應的屬性設置函數(shù)。 主要的函數(shù)如下: 1、pthread_attr_init 功能: ? ? ? ?對線程屬性變量的初始化。 頭文件: ? ? <pthread.h> 函數(shù)原型: ? int pthread_attr_init (pthread_attr_t* attr); 函數(shù)傳入值:attr:線程屬性。 函數(shù)返回值:成功: 0 失敗: -1 2、pthread_attr_setscope 功能: ? ? ? ?設置線程?__scope?屬性。scope屬性表示線程間競爭CPU的范圍,也就是說線程優(yōu)先級的有效范圍。POSIX的標準中定義了兩個值:PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS,前者表示與系統(tǒng)中所有線程一起競爭CPU時間,后者表示僅與同進程中的線程競爭CPU。默認為PTHREAD_SCOPE_PROCESS。目前LinuxThreads僅實現(xiàn)了PTHREAD_SCOPE_SYSTEM一值。 頭文件: ? ? <pthread.h> 函數(shù)原型: ??int?pthread_attr_setscope?(pthread_attr_t* attr, int scope); 函數(shù)傳入值:attr: 線程屬性。 scope:PTHREAD_SCOPE_SYSTEM,表示與系統(tǒng)中所有線程一起競爭CPU時間, PTHREAD_SCOPE_PROCESS,表示僅與同進程中的線程競爭CPU 函數(shù)返回值得:同1。 3、pthread_attr_setdetachstate 功能: ? ? ? ?設置線程detachstate屬性。該表示新線程是否與進程中其他線程脫離同步,如果設置為PTHREAD_CREATE_DETACHED則新線程不能用pthread_join()來同步,且在退出時自行釋放所占用的資源。缺省為PTHREAD_CREATE_JOINABLE狀態(tài)。這個屬性也可以在線程創(chuàng)建并運行以后用pthread_detach()來設置,而一旦設置為PTHREAD_CREATE_DETACH狀態(tài)(不論是創(chuàng)建時設置還是運行時設置)則不能再恢復到PTHREAD_CREATE_JOINABLE狀態(tài)。 頭文件: ? ? ?<phread.h> 函數(shù)原型: ???int?pthread_attr_setdetachstate?(pthread_attr_t* attr, int detachstate); 函數(shù)傳入值:attr:線程屬性。 detachstate:PTHREAD_CREATE_DETACHED,不能用pthread_join()來同步,且在退出時自行釋放所占用的資源 PTHREAD_CREATE_JOINABLE,能用pthread_join()來同步 函數(shù)返回值得:同1。 4、pthread_attr_setschedparam 功能: ? ? ? 設置線程schedparam屬性,即調(diào)用的優(yōu)先級。 頭文件: ? ? <pthread.h> 函數(shù)原型: ? int?pthread_attr_setschedparam?(pthread_attr_t* attr, struct sched_param* param); 函數(shù)傳入值:attr:線程屬性。 param:線程優(yōu)先級。一個struct sched_param結(jié)構(gòu),目前僅有一個sched_priority整型變量表示線程的運行優(yōu)先級。這個參數(shù)僅當調(diào)度策略為實時(即SCHED_RR或SCHED_FIFO)時才有效,并可以在運行時通過pthread_setschedparam()函數(shù)來改變,缺省為0 函數(shù)返回值:同1。 5、pthread_attr_getschedparam 功能: ? ? ? 得到線程優(yōu)先級。 頭文件: ? ?<pthread.h> 函數(shù)原型: ?int?pthread_attr_getschedparam?(pthread_attr_t* attr, struct sched_param* param); 函數(shù)傳入值:attr:線程屬性; param:線程優(yōu)先級; 函數(shù)返回值:同1。轉(zhuǎn)載于:https://www.cnblogs.com/rivsidn/p/10673748.html
總結(jié)
以上是生活随笔為你收集整理的线程属性 pthread_attr_t的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: visio2016交叉线(跨线)去掉交叉
- 下一篇: iPhone 各屏幕尺寸及解析