Linux线程属性总结 http://blog.csdn.net/zsf8701/article/details/7842392
Linux線程屬性總結
分類:?Linux 2012-08-08 11:05? 3657人閱讀? 評論(2)? 收藏? 舉報 linux thread solaris concurrency system 多線程目錄(?)[+]
線程屬性標識符:pthread_attr_t 包含在 pthread.h 頭文件中。
[c]? view plain copy屬性值不能直接設置,須使用相關函數進行操作,初始化的函數為pthread_attr_init,這個函數必須在pthread_create函數之前調用。之后須用pthread_attr_destroy函數來釋放資源。線程屬性主要包括如下屬性:作用域(scope)、棧尺寸(stack size)、棧地址(stack address)、優先級(priority)、分離的狀態(detached state)、調度策略和參數(scheduling policy and parameters)。默認的屬性為非綁定、非分離、缺省1M的堆棧、與父進程同樣級別的優先級。
一、線程的作用域(scope)
作用域屬性描述特定線程將與哪些線程競爭資源。線程可以在兩種競爭域內競爭資源:
二、線程的綁定狀態(binding state)
輕進程(LWP:Light Weight Process)關于線程的綁定,牽涉到另外一個概念:輕進程(LWP:Light Weight Process):輕進程可以理解為內核線程,它位于用戶層和系統層之間。系統對線程資源的分配、對線程的控制是通過輕進程來實現的,一個輕進程可以控制一個或多個線程。
默認狀況下,啟動多少輕進程、哪些輕進程來控制哪些線程是由系統來控制的,這種狀況即稱為非綁定的。
綁定狀況下,則顧名思義,即某個線程固定的"綁"在一個輕進程之上。被綁定的線程具有較高的響應速度,這是因為CPU時間片的調度是面向輕進程的,綁定的線程可以保證在需要的時候它總有一個輕進程可用。通過設置被綁定的輕進程的優先級和調度級可以使得綁定的線程滿足諸如實時反應之類的要求。
三、線程的分離狀態(detached state)
線程的默認屬性是非分離狀態,這種情況下,原有的線程等待創建的線程結束。只有當pthread_join()函數返回時,創建的線程才算終止,才能釋放自己占用的系統資源。
分離線程沒有被其他的線程所等待,自己運行結束了,線程也就終止了,馬上釋放系統資源。應該根據自己的需要,選擇適當的分離狀態。
第二個參數可選為PTHREAD_CREATE_DETACHED(分離線程)和 PTHREAD _CREATE_JOINABLE(非分離線程)。
這里要注意的一點是,如果設置一個線程為分離線程,而這個線程運行又非常快,它很可能在pthread_create函數返回之前就終止了,它終止以后就可能將線程號和系統資源移交給其他的線程使用,這樣調用pthread_create的線程就得到了錯誤的線程號。要避免這種情況可以采取一定的同步措施,最簡單的方法之一是可以在被創建的線程里調用pthread_cond_timewait函數,讓這個線程等待一會兒,留出足夠的時間讓函數pthread_create返回。設置一段等待時間,是在多線程編程里常用的方法。但是注意不要使用諸如wait()之類的函數,它們是使整個進程睡眠,并不能解決線程同步的問題。
四、線程的優先級(priority)
五、線程的棧地址(stack address)
六、線程的棧大小(stack size)
七、線程的棧保護區大小(stack guard size)
八、線程的調度策略(schedpolicy)
POSIX標準指定了三種調度策略:先入先出策略 (SCHED_FIFO)、循環策略 (SCHED_RR) 和自定義策略 (SCHED_OTHER)。SCHED_FIFO 是基于隊列的調度程序,對于每個優先級都會使用不同的隊列。SCHED_RR 與 FIFO 相似,不同的是前者的每個線程都有一個執行時間配額。SCHED_FIFO 和 SCHED_RR 是對 POSIX Realtime 的擴展。SCHED_OTHER 是缺省的調度策略。
如果調用進程具有有效的用戶 ID 0,則爭用范圍為系統 (PTHREAD_SCOPE_SYSTEM) 的先入先出線程屬于實時 (RT) 調度類。如果這些線程未被優先級更高的線程搶占,則會繼續處理該線程,直到該線程放棄或阻塞為止。對于具有進程爭用范圍 (PTHREAD_SCOPE_PROCESS)) 的線程或其調用進程沒有有效用戶 ID 0 的線程,請使用 SCHED_FIFO,SCHED_FIFO 基于 TS 調度類。
如果調用進程具有有效的用戶 ID 0,則爭用范圍為系統 (PTHREAD_SCOPE_SYSTEM)) 的循環線程屬于實時 (RT) 調度類。如果這些線程未被優先級更高的線程搶占,并且這些線程沒有放棄或阻塞,則在系統確定的時間段內將一直執行這些線程。對于具有進程爭用范圍 (PTHREAD_SCOPE_PROCESS) 的線程,請使用 SCHED_RR(基于 TS 調度類)。此外,這些線程的調用進程沒有有效的用戶 ID 0。
九、線程并行級別(concurrency)
應用程序使用 pthread_setconcurrency() 通知系統其所需的并發級別。
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
總結
以上是生活随笔為你收集整理的Linux线程属性总结 http://blog.csdn.net/zsf8701/article/details/7842392的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 心电图的室速节律
- 下一篇: 后台管理系统2——登录、退出、注册功能、