<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 多線(xiàn)程編程之:Linux線(xiàn)程編程

多線(xiàn)程編程之:Linux線(xiàn)程編程

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏


本文引用地址:http://dyxdggzs.com/article/257101.htm

該程序運行結果如下所示:


$ ./thread_sem

Create treads success

Waiting for threads to finish...

Thread 2 is starting

Thread 2: job 0 delay = 9

Thread 2: job 1 delay = 5

Thread 2: job 2 delay = 10

Thread 2 finished

Thread 2 joined

Thread 1 is starting

Thread 1: job 0 delay = 7

Thread 1: job 1 delay = 4

Thread 1: job 2 delay = 4

Thread 1 finished

Thread 1 joined

Thread 0 is starting

Thread 0: job 0 delay = 10

Thread 0: job 1 delay = 8

Thread 0: job 2 delay = 9

Thread 0 finished

Thread 0 joined


9.2.3 線(xiàn)程屬性

(1)函數說(shuō)明。

()函數的第二個(gè)參數(pthread_attr_t *attr)表示線(xiàn)程的屬性。在上一個(gè)實(shí)例中,將該值設為NULL,也就是采用默認屬性,線(xiàn)程的多項屬性都是可以更改的。這些屬性主要包括綁定屬性、分離屬性、堆棧地址、堆棧大小以及優(yōu)先級。其中系統默認的屬性為非綁定、非分離、缺省1M的堆棧以及與父進(jìn)程同樣級別的優(yōu)先級。下面首先對綁定屬性和分離屬性的基本概念進(jìn)行講解。


n 綁定屬性。

前面已經(jīng)提到,中采用“一對一”的線(xiàn)程機制,也就是一個(gè)用戶(hù)線(xiàn)程對應一個(gè)內核線(xiàn)程。綁定屬性就是指一個(gè)用戶(hù)線(xiàn)程固定地分配給一個(gè)內核線(xiàn)程,因為CPU時(shí)間片的調度是面向內核線(xiàn)程(也就是輕量級進(jìn)程)的,因此具有綁定屬性的線(xiàn)程可以保證在需要的時(shí)候總有一個(gè)內核線(xiàn)程與之對應。而與之對應的非綁定屬性就是指用戶(hù)線(xiàn)程和內核線(xiàn)程的關(guān)系不是始終固定的,而是由系統來(lái)控制分配的。

n 分離屬性。

分離屬性是用來(lái)決定一個(gè)線(xiàn)程以什么樣的方式來(lái)終止自己。在非分離情況下,當一個(gè)線(xiàn)程結束時(shí),它所占用的系統資源并沒(méi)有被釋放,也就是沒(méi)有真正的終止。只有當pthread_join()函數返回時(shí),創(chuàng )建的線(xiàn)程才能釋放自己占用的系統資源。而在分離屬性情況下,一個(gè)線(xiàn)程結束時(shí)立即釋放它所占有的系統資源。這里要注意的一點(diǎn)是,如果設置一個(gè)線(xiàn)程的分離屬性,而這個(gè)線(xiàn)程運行又非???,那么它很可能在()函數返回之前就終止了,它終止以后就可能將線(xiàn)程號和系統資源移交給其他的線(xiàn)程使用,這時(shí)調用()的線(xiàn)程就得到了錯誤的線(xiàn)程號。


這些屬性的設置都是通過(guò)特定的函數來(lái)完成的,通常首先調用pthread_attr_init()函數進(jìn)行初始化,之后再調用相應的屬性設置函數,最后調用pthread_attr_destroy()函數對分配的屬性結構指針進(jìn)行清理和回收。設置綁定屬性的函數為pthread_attr_setscope(),設置線(xiàn)程分離屬性的函數為pthread_attr_setdetachstate(),設置線(xiàn)程優(yōu)先級的相關(guān)函數為pthread_attr_getschedparam()(獲取線(xiàn)程優(yōu)先級)和pthread_attr_setschedparam()(設置線(xiàn)程優(yōu)先級)。在設置完這些屬性后,就可以調用pthread_create()函數來(lái)創(chuàng )建線(xiàn)程了。


(2)函數格式。

表9.9列出了pthread_attr_init()函數的語(yǔ)法要點(diǎn)。

表9.9 pthread_attr_init()函數語(yǔ)法要點(diǎn)

所需頭文件

#include pthread.h>

函數原型

int pthread_attr_init(pthread_attr_t *attr)

函數傳入值

attr:線(xiàn)程屬性結構指針

函數返回值

成功:0

出錯:返回錯誤碼


表9.10列出了pthread_attr_setscope()函數的語(yǔ)法要點(diǎn)。

表9.10 pthread_attr_setscope()函數語(yǔ)法要點(diǎn)

所需頭文件

#include pthread.h>

函數原型

int pthread_attr_setscope(pthread_attr_t *attr, int scope)

函數傳入值

attr:線(xiàn)程屬性結構指針

scope

PTHREAD_SCOPE_SYSTEM:綁定

PTHREAD_SCOPE_PROCESS:非綁定

函數返回值

成功:0

出錯:-1


表9.11列出了pthread_attr_setdetachstate()函數的語(yǔ)法要點(diǎn)。

表9.11 pthread_attr_setdetachstate()函數語(yǔ)法要點(diǎn)

所需頭文件

#include pthread.h>

函數原型

int pthread_attr_setscope(pthread_attr_t *attr, int detachstate)

函數傳入值

attr:線(xiàn)程屬性

detachstate

PTHREAD_CREATE_DETACHED:分離

PTHREAD _CREATE_JOINABLE:非分離

函數返回值

成功:0

出錯:返回錯誤碼


表9.12列出了pthread_attr_getschedparam()函數的語(yǔ)法要點(diǎn)。

表9.12 pthread_attr_getschedparam()函數語(yǔ)法要點(diǎn)

所需頭文件

#include pthread.h>

函數原型

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

函數傳入值

attr:線(xiàn)程屬性結構指針

param:線(xiàn)程優(yōu)先級

函數返回值

成功:0

出錯:返回錯誤碼


表9.13列出了pthread_attr_setschedparam()函數的語(yǔ)法要點(diǎn)。

表9.13 pthread_attr_setschedparam()函數語(yǔ)法要點(diǎn)

所需頭文件

#include pthread.h>

函數原型

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

函數傳入值

attr:線(xiàn)程屬性結構指針

param:線(xiàn)程優(yōu)先級

函數返回值

成功:0

出錯:返回錯誤碼

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>