新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 多線程編程之:Linux線程編程

        多線程編程之:Linux線程編程

        作者: 時間:2013-09-13 來源:網絡 收藏


        本文引用地址:http://www.104case.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 線程屬性

        (1)函數說明。

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


        n 綁定屬性。

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

        n 分離屬性。

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


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


        (2)函數格式。

        表9.9列出了pthread_attr_init()函數的語法要點。

        表9.9 pthread_attr_init()函數語法要點

        所需頭文件

        #include pthread.h>

        函數原型

        int pthread_attr_init(pthread_attr_t *attr)

        函數傳入值

        attr:線程屬性結構指針

        函數返回值

        成功:0

        出錯:返回錯誤碼


        表9.10列出了pthread_attr_setscope()函數的語法要點。

        表9.10 pthread_attr_setscope()函數語法要點

        所需頭文件

        #include pthread.h>

        函數原型

        int pthread_attr_setscope(pthread_attr_t *attr, int scope)

        函數傳入值

        attr:線程屬性結構指針

        scope

        PTHREAD_SCOPE_SYSTEM:綁定

        PTHREAD_SCOPE_PROCESS:非綁定

        函數返回值

        成功:0

        出錯:-1


        表9.11列出了pthread_attr_setdetachstate()函數的語法要點。

        表9.11 pthread_attr_setdetachstate()函數語法要點

        所需頭文件

        #include pthread.h>

        函數原型

        int pthread_attr_setscope(pthread_attr_t *attr, int detachstate)

        函數傳入值

        attr:線程屬性

        detachstate

        PTHREAD_CREATE_DETACHED:分離

        PTHREAD _CREATE_JOINABLE:非分離

        函數返回值

        成功:0

        出錯:返回錯誤碼


        表9.12列出了pthread_attr_getschedparam()函數的語法要點。

        表9.12 pthread_attr_getschedparam()函數語法要點

        所需頭文件

        #include pthread.h>

        函數原型

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

        函數傳入值

        attr:線程屬性結構指針

        param:線程優先級

        函數返回值

        成功:0

        出錯:返回錯誤碼


        表9.13列出了pthread_attr_setschedparam()函數的語法要點。

        表9.13 pthread_attr_setschedparam()函數語法要點

        所需頭文件

        #include pthread.h>

        函數原型

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

        函數傳入值

        attr:線程屬性結構指針

        param:線程優先級

        函數返回值

        成功:0

        出錯:返回錯誤碼

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

        linux相關文章:linux教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 达拉特旗| 乡城县| 孟津县| 寿光市| 陇西县| 闵行区| 永清县| 彩票| 罗甸县| 龙门县| 田东县| 徐闻县| 六安市| 大埔区| 梅州市| 乌拉特中旗| 嘉定区| 康乐县| 泰来县| 静宁县| 山东省| 七台河市| 勐海县| 嘉义市| 瓦房店市| 恩施市| 会泽县| 河西区| 永泰县| 邵东县| 天峨县| 涪陵区| 广元市| 新宁县| 常德市| 鸡东县| 沈阳市| 昂仁县| 黄平县| 安陆市| 常德市|