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

2021-08-04 05:40:28 字數 2211 閱讀 5771

(1)通過為每種事件型別分配單獨的處理執行緒,可以簡化處理非同步事件的**

(2)多個程序必須使用作業系統提供的複雜機制才能實現記憶體和檔案描述符的共享,而多個執行緒自動地可以訪問相同的儲存位址空間和檔案描述符

(3)互動的程式可以通過使用多執行緒來改善響應時間,多執行緒可以把程式中處理使用者輸入輸出的部分與其他部分分開。

新增的執行緒可以通過呼叫pthread_create函式建立

#include 

<

pthread.h

>

2int

pthread_create(pthread_t 

*thread,pthread_attr_t 

*attr,

void*(

*start_routine)(

void*),

void

*arg);

thread: 引數是乙個指標,當執行緒成功建立時,返回建立執行緒id。

attr: 用於指定執行緒的屬性

start_routine: 該引數是乙個函式指標,指向執行緒建立後要呼叫的函式。

arg: 傳遞給執行緒函式的引數。

注意的幾點:

1.執行緒建立時並不能保證哪個執行緒會先執行,新建立的執行緒掛起的訊號集會被清除

2.每個執行緒都提供errno的副本

單個執行緒的3種退出方式( 不終止整個程序的情況下)

#include

2 void pthread_exit(void *retval);

3 void pthread_join(pthread_t th,void *thread_return); 

注意:

程式執行到pthread_join時,呼叫執行緒將一直阻塞,知道指定的執行緒終止

以下**摘自unix環境高階程式設計

#include #include #include void* thr_fn1(void *arg)  

void* thr_fn2(void *arg)

int main(void)

err = pthread_create(&tid2, null, thr_fn2, null);

if(err != 0)

err = pthread_join(tid1, &tret);

if(err != 0)

printf("thread1 exit code %d\n",(int)tret);

err = pthread_join(tid2, &tret);

if(err != 0)

printf("thread1 exi2 code %d\n",(int)tret);

return 0;

}

編譯:gcc ***.c -o ***.out -lpthread      unix原生是不支援多執行緒的,多執行緒通過pthread庫實現,所以需要使用pthread庫進行編譯。

執行: thread 2 exit.

thread 1 return.

thread1 exit code 1

thread1 exi2 code 2

執行緒可以通過呼叫pthread_cancel函式來請求取消同一程序中的其他執行緒

#includeint pthread_cancel(pthread_t tid);

乙個執行緒可以建立多個清理處理程式,記錄在棧中

#include

void pthread_cleanup_push(void (*rtn)(void *),void *arg);

void pthread_clearnup_pop(int execute);

程序原語

執行緒原語

描述fork

pthread_create

建立新的控制流

exit

pthread_exit

從現有的控制流中退出

waitpid

phtread_join

從控制流中得到退出狀態

atexit

phtread_cleanup_push

註冊在退出控制流時呼叫的函式

getpid

pthread_self

獲得控制流的id

abort

pthread_cancel

請求控制流的非正常退出

Unix環境高階程式設計筆記 11 執行緒

1 執行緒概念 執行緒包含了表示程序內執行環境必須的資訊,其中包括程序中標識執行緒的執行緒id 一組暫存器值 棧 排程優先順序和策略 訊號遮蔽字 errno變數以及執行緒私有資料。程序的所有資訊對該程序的所有執行緒都是共享的,包括可執行的程式文字 程式的全域性記憶體和堆記憶體 棧以及檔案描述符。2 ...

UNIX環境高階程式設計 執行緒 死鎖詳解

一 死鎖產生原因 執行緒對同乙個互斥量加鎖兩次,那麼它自身就會陷入死鎖狀態 多個互斥量,多個執行緒交叉請求訪問衝突。例如,程式中使用乙個以上的互斥量時,如果允許乙個執行緒一直占有第乙個互斥量,並且在試圖鎖住第二個互斥量時處於阻塞狀態,但是擁有第二個互斥量的執行緒也在試圖鎖住第乙個互斥量。因為兩個執行...

unix環境高階程式設計

unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...