Linux執行緒常見屬性小結

2021-07-22 04:05:58 字數 2579 閱讀 8678

我們知道現代作業系統一般都支援多執行緒,執行緒是作業系統排程的基本單位,程序是作業系統分派資源的基本單位,所以對執行緒屬性的掌握也十分重要,首先讓我們來看看pthread_attr_t這個結構體:

//執行緒屬性結構如下:  

typedef struct pthread_attr_t;

預設情況下新建乙個執行緒屬性變數,然後對其修改:

1.執行緒的分離狀態:

這個狀態決定了執行緒以一種什麼樣的方式來結束自己,一般有兩種狀態:

(1)非分離狀態:建立的預設屬性就是非分離狀態,在這種狀態下,原有執行緒等待建立執行緒結束,只有原有程序呼叫pthread_join()函式時,被建立的程序才能釋放自己占有的系統資源。

(2)分離狀態:在這種狀態下建立的執行緒沒有被其它執行緒所等待,自己執行結束了,執行緒就終止並且馬上釋放掉所占有的資源。

假設我們建立乙個detach執行緒:

建立 detach 執行緒:

2.執行緒的棧位址和棧大小

這個主題已經在我的部落格討論過,這裡不再贅述!!!下面只列出一些相關函式:

3.執行緒排程策略:

標頭檔案:

#include 函式原形:

int pthread_attr_getschedpolicy(const pthread_attr_t *attr,int *policy);

int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy);

引數:attr 執行緒屬性變數

policy 排程策略

返回值:

若成功返回0,若失敗返回-1。

說明:這兩個函式具有兩個引數,第1個引數是指向屬性物件的指標,第2個引數是排程策略或指向排程策略的指標。排程策略可能的值是先進先出(sched_fifo)輪轉法(sched_rr),或其它(sched_other)。sched_fifo策略允許乙個執行緒執行直到有更高優先順序的執行緒準備好,或者直到它自願阻塞自己。在sched_fifo排程策略下,當有乙個執行緒準備好時,除非有平等或更高優先順序的執行緒已經在執行,否則它會很快開始執行。sched_rr(輪循)策略是基本相同的,不同之處在於:如果有乙個sched_rr策略的執行緒執行了超過乙個固定的時期(時間片間隔)沒有阻塞,而另外的sched_rr或schbd_fipo策略的相同優先順序的執行緒準備好時,執行的執行緒將被搶占以便準備好的執行緒可以執行。當有sched_fifo或sched_rr策賂的執行緒在乙個條件變數上等待或等待加鎖同乙個互斥量時,它們將以優先順序順序被喚醒。即,如果乙個低優先順序的sched_fifo執行緒和乙個高優先織的sched_fifo執行緒都在等待相同的互斥鎖,則當互斥量被解鎖時,高優先順序執行緒將總是首先被解除阻塞。

4.執行緒棧末尾緩衝區大小:

名稱::

pthread_attr_getguardsize

pthread_attr_setguardsize

功能:

獲得/修改執行緒棧末尾的警戒緩衝區大小

標頭檔案:

#include

函式原形:

int pthread_attr_getguardsize(const pthread_attr_t *restrict attr,size_t *restrict guardsize);

int pthread_attr_setguardsize(pthread_attr_t *attr ,size_t *guardsize);

引數:

attr執行緒屬性, guardsize警戒緩衝區的大小

返回值:

若成功返回0,若失敗返回-1。

執行緒屬性guardsizei控制著執行緒棧末尾之後用以避免棧溢位的擴充套件記憶體的大小,這個屬性預設值是有具體定義來實現的,但常用值是系統頁大小。可以把guardsize執行緒屬性設定為0,不允許屬性的這種行為發生;在這種情況下,不會提供警戒緩衝區。同樣,如果修改了執行緒屬性stackaddr,系統會認為我們自己管理堆疊,進而使棧警戒緩衝區機制無效,這等同於吧guardsize執行緒屬性設定為0;

linux 執行緒 執行緒屬性

typedef struct pthread attr t 這個結構只是為了說明 實際結構具體系統而定 雖然如此我們並不用擔心因為 屬性值不能直接設定,須使用相關函式進行操作 int pthread attr init pthread attr t attr 初始化執行緒屬性 int pthread...

Linux執行緒屬性

執行緒屬性識別符號 pthread attr t 包含在 pthread.h 標頭檔案中。typedef struct pthread attr t 屬性值不能直接設定,須使用相關函式進行操作,初始化的函式為pthread attr init,這個函式必須在pthread create函式之前呼叫。...

linux執行緒相關小結

typedef unsigned long int pthread t int pthread create pthread t thread,pthread attr t attr,void func void void arg attr為null時使用預設屬性。執行緒的退出方式 1.執行完成後隱...