日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux线程属性总结

發布時間:2024/1/8 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux线程属性总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/zsf8701/article/details/7843837

線程屬性標識符:pthread_attr_t 包含在 pthread.h 頭文件中。

[c]? view plain copy
  • //線程屬性結構如下:??
  • typedef?struct??
  • {??
  • ????int???????????????????etachstate;??????//線程的分離狀態??
  • ????int???????????????????schedpolicy;?????//線程調度策略??
  • ????structsched_param?????schedparam;??????//線程的調度參數??
  • ????int???????????????????inheritsched;????//線程的繼承性??
  • ????int???????????????????scope;???????????//線程的作用域??
  • ????size_t????????????????guardsize;???????//線程棧末尾的警戒緩沖區大小??
  • ????int???????????????????stackaddr_set;???//線程的棧設置??
  • ????void*?????????????????stackaddr;???????//線程棧的位置??
  • ????size_t????????????????stacksize;???????//線程棧的大小??
  • }pthread_attr_t;??
  • 屬性值不能直接設置,須使用相關函數進行操作,初始化的函數為pthread_attr_init,這個函數必須在pthread_create函數之前調用。之后須用pthread_attr_destroy函數來釋放資源。線程屬性主要包括如下屬性:作用域(scope)、棧尺寸(stack size)、棧地址(stack address)、優先級(priority)、分離的狀態(detached state)、調度策略和參數(scheduling policy and parameters)。默認的屬性為非綁定、非分離、缺省1M的堆棧、與父進程同樣級別的優先級。

    一、線程的作用域(scope)

    作用域屬性描述特定線程將與哪些線程競爭資源。線程可以在兩種競爭域內競爭資源:

  • 進程域(process scope):與同一進程內的其他線程。
  • 系統域(system scope):與系統中的所有線程。一個具有系統域的線程將與整個系統中所有具有系統域的線程按照優先級競爭處理器資源,進行調度。
  • Solaris系統,實際上,從 Solaris 9 發行版開始,系統就不再區分這兩個范圍。
  • 二、線程的綁定狀態(binding state)

    輕進程(LWP:Light Weight Process)關于線程的綁定,牽涉到另外一個概念:輕進程(LWP:Light Weight Process):輕進程可以理解為內核線程,它位于用戶層和系統層之間。系統對線程資源的分配、對線程的控制是通過輕進程來實現的,一個輕進程可以控制一個或多個線程。

  • 非綁定狀態
    默認狀況下,啟動多少輕進程、哪些輕進程來控制哪些線程是由系統來控制的,這種狀況即稱為非綁定的。
  • 綁定狀態
    綁定狀況下,則顧名思義,即某個線程固定的"綁"在一個輕進程之上。被綁定的線程具有較高的響應速度,這是因為CPU時間片的調度是面向輕進程的,綁定的線程可以保證在需要的時候它總有一個輕進程可用。通過設置被綁定的輕進程的優先級和調度級可以使得綁定的線程滿足諸如實時反應之類的要求。
  • 三、線程的分離狀態(detached state)

  • 線程的分離狀態決定一個線程以什么樣的方式來終止自己。
  • 非分離狀態
    線程的默認屬性是非分離狀態,這種情況下,原有的線程等待創建的線程結束。只有當pthread_join()函數返回時,創建的線程才算終止,才能釋放自己占用的系統資源。
  • 分離狀態
    分離線程沒有被其他的線程所等待,自己運行結束了,線程也就終止了,馬上釋放系統資源。應該根據自己的需要,選擇適當的分離狀態。
  • 線程分離狀態的函數:pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)。
    第二個參數可選為PTHREAD_CREATE_DETACHED(分離線程)和 PTHREAD _CREATE_JOINABLE(非分離線程)。
    這里要注意的一點是,如果設置一個線程為分離線程,而這個線程運行又非常快,它很可能在pthread_create函數返回之前就終止了,它終止以后就可能將線程號和系統資源移交給其他的線程使用,這樣調用pthread_create的線程就得到了錯誤的線程號。要避免這種情況可以采取一定的同步措施,最簡單的方法之一是可以在被創建的線程里調用pthread_cond_timewait函數,讓這個線程等待一會兒,留出足夠的時間讓函數pthread_create返回。設置一段等待時間,是在多線程編程里常用的方法。但是注意不要使用諸如wait()之類的函數,它們是使整個進程睡眠,并不能解決線程同步的問題。
  • 四、線程的優先級(priority)

  • 新線程的優先級為默認為0。
  • 新線程不繼承父線程調度優先級(PTHREAD_EXPLICIT_SCHED)
  • 僅當調度策略為實時(即SCHED_RR或SCHED_FIFO)時才有效,并可以在運行時通過pthread_setschedparam()函數來改變,缺省為0。
  • 五、線程的棧地址(stack address)

  • POSIX.1定義了兩個常量_POSIX_THREAD_ATTR_STACKADDR 和_POSIX_THREAD_ATTR_STACKSIZE檢測系統是否支持棧屬性。
  • 也可以給sysconf函數傳遞_SC_THREAD_ATTR_STACKADDR或 _SC_THREAD_ATTR_STACKSIZE來進行檢測。
  • 當進程棧地址空間不夠用時,指定新建線程使用由malloc分配的空間作為自己的棧空間。通過pthread_attr_setstackaddr和pthread_attr_getstackaddr兩個函數分別設置和獲取線程的棧地址。傳給pthread_attr_setstackaddr函數的地址是緩沖區的低地址(不一定是棧的開始地址,棧可能從高地址往低地址增長)。
  • 六、線程的棧大小(stack size)

  • 當系統中有很多線程時,可能需要減小每個線程棧的默認大小,防止進程的地址空間不夠用
  • 當線程調用的函數會分配很大的局部變量或者函數調用層次很深時,可能需要增大線程棧的默認大小。
  • 函數pthread_attr_getstacksize和 pthread_attr_setstacksize提供設置。
  • 七、線程的棧保護區大小(stack guard size)

  • 在線程棧頂留出一段空間,防止棧溢出。
  • 當棧指針進入這段保護區時,系統會發出錯誤,通常是發送信號給線程。
  • 該屬性默認值是PAGESIZE大小,該屬性被設置時,系統會自動將該屬性大小補齊為頁大小的整數倍。
  • 當改變棧地址屬性時,棧保護區大小通常清零。
  • 八、線程的調度策略(schedpolicy)

    POSIX標準指定了三種調度策略:先入先出策略 (SCHED_FIFO)、循環策略 (SCHED_RR) 和自定義策略 (SCHED_OTHER)。SCHED_FIFO 是基于隊列的調度程序,對于每個優先級都會使用不同的隊列。SCHED_RR 與 FIFO 相似,不同的是前者的每個線程都有一個執行時間配額。SCHED_FIFO 和 SCHED_RR 是對 POSIX Realtime 的擴展。SCHED_OTHER 是缺省的調度策略。

  • 新線程默認使用 SCHED_OTHER 調度策略。線程一旦開始運行,直到被搶占或者直到線程阻塞或停止為止。
  • SCHED_FIFO
    如果調用進程具有有效的用戶 ID 0,則爭用范圍為系統 (PTHREAD_SCOPE_SYSTEM) 的先入先出線程屬于實時 (RT) 調度類。如果這些線程未被優先級更高的線程搶占,則會繼續處理該線程,直到該線程放棄或阻塞為止。對于具有進程爭用范圍 (PTHREAD_SCOPE_PROCESS)) 的線程或其調用進程沒有有效用戶 ID 0 的線程,請使用 SCHED_FIFO,SCHED_FIFO 基于 TS 調度類。
  • SCHED_RR
    如果調用進程具有有效的用戶 ID 0,則爭用范圍為系統 (PTHREAD_SCOPE_SYSTEM)) 的循環線程屬于實時 (RT) 調度類。如果這些線程未被優先級更高的線程搶占,并且這些線程沒有放棄或阻塞,則在系統確定的時間段內將一直執行這些線程。對于具有進程爭用范圍 (PTHREAD_SCOPE_PROCESS) 的線程,請使用 SCHED_RR(基于 TS 調度類)。此外,這些線程的調用進程沒有有效的用戶 ID 0。
  • 九、線程并行級別(concurrency)

    應用程序使用 pthread_setconcurrency() 通知系統其所需的并發級別。


    常用操作函數

    1、初始化一個線程對象的屬性 int pthread_attr_init(pthread_attr_t *attr);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針說 明:Posix線程中的線程屬性pthread_attr_t主要包括scope屬性、detach屬性、堆棧地址、堆棧大小、優先級。pthread_attr_init實現時為屬性對象分配了動態內存空間。頭文件:#include <pthread.h> 2、銷毀一個線程屬性對象 int pthread_attr_destroy(pthread_attr_t *attr);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針說 明:經pthread_attr_destroy去除初始化之后的pthread_attr_t結構被pthread_create函數調用,將會導致其返回錯誤。頭文件:#include <pthread.h> 3、獲取線程間的CPU親緣性 int pthread_attr_getaffinity_np(pthread_attr_t *attr, size_t cpusetsize, cpu_set_t *cpuset);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針說 明:獲取線程的CPU親緣屬性頭文件:#include <pthread.h> 4、設置線程的CPU親緣性 int pthread_attr_setaffinity_np(pthread_attr_t *attr, size_t cpusetsize, const cpu_set_t *cpuset);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針cpusetsize 指向CPU組的緩沖區大小cpuset 指向CPU組的指針說 明:通過指定cupset來設置線程的CPU親緣性頭文件:#include <pthread.h> 5、獲取線程分離狀態屬性 int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針detachstate 保存返回的分離狀態屬性說 明:獲取線程分離狀態屬性頭文件:#include <pthread.h> 6、修改線程分離狀態屬性 int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針detachstat 有兩個取值PTHREAD_CREATE_DETACHED(分離)PTHREAD_CREATE_JOINABLE(非分離)說 明:Posix線程中的線程屬性pthread_attr_t主要包括scope屬性、detach屬性、堆棧地址、堆棧大小、優先級。頭文件:#include <pthread.h> 7、獲取線程的棧保護區大小 int pthread_attr_getguardsize(pthread_attr_t *attr, size_t *guardsize);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針guardsize 返回獲取的棧保護區大小說 明:獲取線程的棧保護區大小頭文件:#include <pthread.h> 8、設置線程的棧保護區大小 int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針guardsize 線程的棧保護區大小說 明:參數提供了對棧指針溢出的保護。默認為系統頁大小如果設置為0表示沒有保護區。大于0,則會為每個使用 attr 創建的線程提供大小至少為 guardsize 字節的溢出保護區頭文件:#include <pthread.h> 9、獲取線程的作用域 int pthread_attr_getscope(pthread_attr_t *attr, int *scope);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針scope 返回線程的作用域說 明:指定了作用域也就指定了線程與誰競爭資源頭文件:#include <pthread.h> 10、設置線程的作用域 int pthread_attr_setscope(pthread_attr_t *attr, int scope);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針guardsize 線程的作用域,可以取如下值PTHREAD_SCOPE_SYSTEM 與系統中所有進程中線程競爭PTHREAD_SCOPE_PROCESS 與當前進程中的其他線程競爭說 明:指定了作用域也就指定了線程與誰競爭資源頭文件:#include <pthread.h> 11、獲取線程的堆棧信息(棧地址和棧大小) int pthread_attr_getstack(pthread_attr_t *attr, void **stackaddr, size_t *stacksize);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針stackaddr 返回獲取的棧地址stacksize 返回獲取的棧大小說 明:獲取線程的堆棧地址和大小頭文件:#include <pthread.h> 12、設置線程堆棧區 int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針stackaddr 線程的堆棧地址:應該是可移植的,對齊頁邊距的可以用posix_memalign來進行獲取stacksize 線程的堆棧大小:應該是頁大小的整數倍說 明:設置堆棧區,將導致pthread_attr_setguardsize失效。頭文件:#include <pthread.h> 13、獲取線程堆棧地址 int pthread_attr_getstackaddr(pthread_attr_t *attr, void **stackaddr);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針stackaddr 返回獲取的棧地址說 明:函數已過時,一般用pthread_attr_getstack來代替頭文件:#include <pthread.h> 14、設置線程堆棧地址 int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針stackaddr 設置線程堆棧地址說 明:函數已過時,一般用pthread_attr_setstack來代替頭文件:#include <pthread.h> 15、獲取線程堆棧大小 int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針stacksize 返回線程的堆棧大小說 明:獲取線程堆棧大小頭文件:#include <pthread.h> 16、設置線程堆棧大小 int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針guardsize 線程的棧保護區大小:應該是頁大小的整數倍說 明:設置線程堆棧大小:頭文件:#include <pthread.h> 17、獲取線程的調度策略 int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針policy 返回線程的調度策略說 明:獲取線程的調度策略頭文件:#include <pthread.h> 18、設置線程的調度策略 int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針policy 線程的調度策略,有如下三種:SCHED_FIFO 先入先出策略SCHED_RR 輪轉調度,類似于 FIFO,但加上了時間輪片算法SCHED_OTHER 系統默認策略說 明:設置線程的調度策略頭文件:#include <pthread.h> 19、獲取線程的調度參數 int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針param 返回獲取的調度參數,該結構僅有一個從參數,如下struct sched_param {int sched_priority; /* Scheduling priority */};說 明:獲取線程的調度參數頭文件:#include <pthread.h> 20、設置線程的調度參數 int pthread_attr_getschedparam(pthread_attr_t *attr, struct sched_param *param);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針param 要設置的調度參數說 明:設置線程的調度參數頭文件:#include <pthread.h> 21、獲取線程是否繼承調度屬性 int pthread_attr_getinheritsched(pthread_attr_t *attr, int *inheritsched);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針inheritsched 返回繼承調度屬性的設置說 明:獲取線程是否繼承調度屬性頭文件:#include <pthread.h> 22、設置線程是否繼承調度屬性 int pthread_attr_getinheritsched(pthread_attr_t *attr, int *inheritsched);返回值:若是成功返回0,否則返回錯誤的編號形 參:attr 指向一個線程屬性的指針guardsize 設置線程是否繼承調度屬性PTHREAD_INHERIT_SCHED:調度屬性將繼承于正創建的線程attr中的設置將被忽略PTHREAD_EXPLICIT_SCHED 調度屬性將被設置為attr中指定的屬性值說 明:頭文件:#include <pthread.h>



    總結

    以上是生活随笔為你收集整理的Linux线程属性总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品视频99 | 999精品一区 | 色黄网站| 黄色生活毛片 | 精品国产av色一区二区深夜久久 | 一卡二卡三卡在线 | 韩国甜性涩爱 | 性生交大片免费看3p | 国产femdom调教7777 | 亚洲精品中文字幕成人片 | av永久免费网站 | 亚洲人人干 | 日韩av电影网 | 久久三级网 | 含羞草一区二区 | 国产全是老熟女太爽了 | 四虎一区二区 | 综合激情网 | 五月天婷婷在线视频 | 久久久久久久久久福利 | 在线观看无码精品 | 中文字幕综合 | 国产一区激情 | 福利在线小视频 | 国产女女做受ⅹxx高潮 | 樱桃香蕉视频 | 国产无遮挡又黄又爽免费视频 | 久久99日韩 | 一区二视频 | 国产污污视频在线观看 | 成人交性视频免费看 | 亚洲永久免费观看 | 日韩欧美性视频 | 亚洲欧洲成人精品久久一码二码 | 久草网视频在线观看 | 一级黄大片 | 极品在线播放 | 无码久久av一区二区三区 | 99久久婷婷国产综合精品草原 | 亚洲国产精品av | 五级 黄 色 片 | 日本www| 极品国产91在线网站 | 久久这里只有精品久久 | 在线视频你懂得 | 韩国三级在线视频 | 毛片动态图 | 午夜h | 久久天堂av综合合色蜜桃网 | 成人深夜视频 | 免费在线观看黄色网址 | 超碰在线天天 | 日韩毛片视频 | 在线观看日本一区二区 | 天天射av | av片国产 | 草色噜噜噜av在线观看香蕉 | 色婷婷av一区二区三区软件 | 神马午夜精品 | 日韩乱码人妻无码中文字幕 | 日韩一区在线看 | 国产精品久久久久免费 | 国产一区二区三区小说 | 天堂8在线| 欧美精品偷拍 | 精品国产aⅴ一区二区三区四川人 | 成人精品一区日本无码网 | 欧美午夜视频在线观看 | 黄网站色视频 | 999精品在线视频 | 天堂中文在线网 | 国产乱码一区二区三区 | 欧洲精品一区 | 成人欧美视频在线观看 | 亚洲天堂一级片 | 免费黄色一级 | 亚洲精品小视频 | 台湾久久| 精品动漫一区二区三区在线观看 | 日韩高清影院 | 日韩精品一区二区三区色欲av | 欧美丰满艳妇bbwbbw | 美女视频黄的免费 | 黑料福利| 12av在线| 欧美在线三区 | 无码精品久久久久久久 | 首尔之春在线观看 | 日韩电影观看 | 国产精品久久精品三级 | 亚洲天堂二区 | 二区三区| 人妻一区二区三区 | 久久国产在线视频 | 人操人人 | 国产欧美一区二区三区精品酒店 | 国产91视频播放 | 青草视频在线免费观看 | 欧美性一区 |