Note4 多執行緒程式設計2

2021-09-13 10:43:01 字數 2565 閱讀 8746

typedef  void  *(thread_body)  (void *thread_arg)

void *thread_worker(void *ctx);

int thread_start(pthread_t *thread_id, thread_body *thread_workbody, void *thread_arg);

第乙個引數 thread_id 是乙個pthread_t型別的指標,他用來返回該執行緒的執行緒id。

第二個引數 thread_workbody

第三個引數 thread_arg 就是傳給了所呼叫的函式的引數,如果有多個引數需要傳遞給子執行緒則需要封裝到乙個結構體裡傳進去

thread_start(&tid, thread_worker, (void *)clifd);
int thread_start(pthread_t * thread_id, thread_body * thread_workbody, void *thread_arg)

if( pthread_attr_setstacksize(&thread_attr, 120*1024) )

if( pthread_attr_setdetachstate(&thread_attr, pthread_create_detached) )

/* create the thread */

if( pthread_create(thread_id, &thread_attr, thread_workbody, thread_arg) )

rv = 0;

posix執行緒中的執行緒屬性 pthread_attr_t 主要包括scope屬性、detach屬性、堆疊位址、堆疊大小、優先順序。在pthread_create中,把第二個引數設定為null的話,將採用預設的屬性配置。

pthread_attr_t 的主要屬性的意義如下:

__schedpolicy,表示新執行緒的排程策略,主要包括sched_other(正常、非實時)、sched_rr(實時、輪轉法)和sched_fifo(實時、先入先出)三種,預設為sched_other,後兩種排程策略僅對超級使用者有效。執行時可以用過pthread_setschedparam()來改變。

__schedparam,乙個struct sched_param結構,目前僅有乙個sched_priority整型變數表示執行緒的執行優先順序。這個引數僅當排程策略為實時(即sched_rr或sched_fifo)時才有效,並可以在執行時通過pthread_setschedparam()函式來改變,預設為0。

__inheritsched,有兩種值可供選擇:pthread_explicit_sched和pthread_inherit_sched,前者表示新執行緒使用顯式指定排程策略和排程引數(即attr中的值),而後者表示繼承呼叫者執行緒的值。預設為pthread_explicit_sched。

__scope,表示執行緒間競爭cpu的範圍,也就是說執行緒優先順序的有效範圍。posix的標準中定義了兩個值:pthread_scope_system和pthread_scope_process,前者表示與系統中所有執行緒一起競爭cpu時間,後者表示僅與同程序中的執行緒競爭cpu。目前linuxthreads僅實現了pthread_scope_system一值。

為了設定這些屬性,posix定義了一系列屬性設定函式,包括pthread_attr_init()、pthread_attr_destroy()和與各個屬性相關的pthread_attr_get***/pthread_attr_set***函式。

在設定執行緒屬性pthread_attr_t 之前,通常先呼叫pthread_attr_init來初始化,之後來呼叫相應的屬性設定函式。

主要的函式如下:

pthread_attr_init

功能: 對執行緒屬性變數的初始化。

標頭檔案:

函式原型: int pthread_attr_init (pthread_attr_t* attr);

函式傳入值:attr:執行緒屬性。

函式返回值:成功: 0 失敗: -1

main函式

}int thread_start()

void *thread_worker()

指標操作時需要上鎖!!!

pthread_mutex_init()			//初始化互斥鎖

pthread_mutex_destroy() //摧毀鎖

pthread_mutex_lock() //申請鎖,阻塞鎖,如果鎖被別的執行緒持有則該函式不會返回

pthread_mutex_unlock() //釋放鎖

pthread_mutex_trylock() //申請鎖,非阻塞鎖,如果鎖現在被別的執行緒占用則返回非0值,如果沒有被占用則返回0

thread_start()自己寫的函式!

pthread_create()是底函式

多執行緒程式設計2

訊號量同步 include include include include include 訊號量函式定義 include void thread fun void arg sem t bin sem define worksize 1024 char workarea worksize int m...

多執行緒程式設計2

include include using namespace std 定義函式,可呼叫的物件。作為執行緒引數的入口 void myprint const int i,char pmybuf int main include include using namespace std void mypr...

實驗4 多執行緒程式設計

主線程實現以下功能 定義全域性變數key 建立兩個執行緒 如果執行緒正常結束,得到執行緒的結束狀態值,並列印 執行緒一完成以下操作 設定全域性變數key的值為字串 hello world 列印3次字串 當前執行緒id key值 接收到執行緒二傳送的取消請求訊號後退出 結束的時候列印字串 thread...