Unix環境多執行緒程式設計 二

2021-04-07 06:51:33 字數 2799 閱讀 7503

資料定義標頭檔案

/usr/include/bits/pthreadtypes.h

pthread_attr_t

執行緒屬性。屬性物件主要包括是否繫結、是否分離、堆疊位址、堆疊大小、優先順序

屬性值不能直接設定,須使用相關函式進行操作

每個屬性都有屬性名,可以單獨通過

pthread_attr_set

屬性名這個函式來更改,通過

pthread_attr_get

屬性名函式獲得屬性。請看詳細

api說明。如:

屬性:detachstate

函式:

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

int pthread_attr_getdetachstate(const pthread_attr_t *attr, int* detachstate);

執行:

pthread_attr_setdetachstate(&attr, pthread_create_joinable);//

設定執行緒屬性為

joinable態

執行緒屬性名

detachstate

pthread_create_joinable

pthread_create_detached

預設:pthread_create_joinable

控制建立的執行緒是

joinable

態還是detached

態schedpolicy

sched_other (regular, non-realtime scheduling)

sched_rr(realtime,round-robin)

sched_fifo (realtime, first-in first-out)

預設:sched_other

優先順序類別

schedparam

預設:0

執行緒優先順序引數

如果schedpolicy

的值為schedpolicy

此屬性無關緊要

執行緒建立後可修改此屬性

inheritsched

pthread_explicit_sched

pthread_inherit_sched

預設:pthread_explicit_sched

說明此執行緒優先順序是否繼承于父執行緒還是通過上面兩個屬性確定

scope

pthread_scope_system

pthread_scope_process

預設:pthread_scope_system

設定執行緒繫結狀態

部分linux

不支援pthread_scope_ process

,需要檢視

man

1.6. #include

執行緒屬性初始化的函式

int pthread_attr_init(pthread_attr_t *attr);

返回:

如果成功

0, 失敗設定

e***

到error

pthread_attr_init

函式初始化執行緒屬性物件

attr

,填充所有屬性為預設值。這個函式必須在

pthread_create

函式之前呼叫,做為

pthread_create

函式的第

2個引數。屬性物件主要包括是否繫結、是否分離、堆疊位址、堆疊大小、優先順序。預設的屬性為非繫結、非分離、預設

1m 的堆疊、與父程序同樣級別的優先順序。

#include

pthread_attr_t attr;

pthread_t tid;

/*初始化屬性值,均設為預設值

*/pthread_attr_init(&attr);

pthread_attr_setscope(&attr, pthread_scope_system);

pthread_create(&tid, &attr, (void *) my_function, null);

設定執行緒繫結狀態的函式為

pthread_attr_setscope

,它有兩個引數,第乙個是指向屬性結構的指標,第二個是繫結型別,它有兩個取值:

pthread_scope_system

(繫結的)和

pthread_scope_process

(非繫結的)

#include

#include

pthread_attr_t attr;

pthread_t tid;

sched_param param;

int newprio=20;

pthread_attr_init(&attr);

pthread_attr_getschedparam(&attr, ¶m);

param.sched_priority

=newprio;

pthread_attr_setschedparam(&attr, ¶m);

pthread_create(&tid, &attr, (void *)myfunction, myarg);

設定執行緒的優先順序,它存放在結構

sched_param

中。用函式

pthread_attr_ getschedparam

和函式pthread_attr_setschedparam

進行存放,一般說來,我們總是先取優先順序,對取得的值修改後再存放回去。

Unix環境多執行緒程式設計 三

使用 posix 1003.1b 訊號量,有別於 systemv ipc,semctl,semop 的訊號量操作。訊號量是為執行緒間共享的資源計數。訊號量的基礎操作是 原子性的增加計數,和等待直到計數器非空並且原子性的減少計數。1 api 1.13 include 訊號量初始化 int sem in...

Unix 多執行緒

unix 執行緒 先來介紹執行緒的最基本操作 由淺入深 執行緒建立 pthread t threadid 執行緒的id儲存型別 型別為unsuigned long int int pthread create pthread t,執行緒的唯一標識id const pthread attr t 優先順...

unix環境高階程式設計 執行緒解析

1 通過為每種事件型別分配單獨的處理執行緒,可以簡化處理非同步事件的 2 多個程序必須使用作業系統提供的複雜機制才能實現記憶體和檔案描述符的共享,而多個執行緒自動地可以訪問相同的儲存位址空間和檔案描述符 3 互動的程式可以通過使用多執行緒來改善響應時間,多執行緒可以把程式中處理使用者輸入輸出的部分與...