Linux 之多執行緒程式設計基礎

2021-08-25 23:02:59 字數 1773 閱讀 8135

多執行緒程式設計時有以下幾點需要特別關注:

建立執行緒時,僅僅申請執行緒自身的棧空間,與同程序的其他執行緒共享其他位址空間,包括**段、資料段、堆等。

核心仍然把執行緒當做乙個程序進行處理的,只不過不再分配記憶體而已

程序是作業系統管理資源的基本單元,執行緒時linux系統排程的基本單元

1、建立執行緒

//from /usr/include/bits/pthread.h

int pthread_create(pthread_t* pid,pthread_attr_t* attr,

void*(fun)(void*),void* param);

函式第1個引數用來儲存執行緒的id,第2個引數為執行緒屬性,一般置為null即可,第3個引數為執行緒執行的函式,第4個引數為函式的引數位址,如果需要傳入多個引數,則可以使用結構體進行傳遞,函式執行成功返回0,否則返回-1。

2、執行緒退出

//from /usr/include/bits/pthreadtypes.h

void pthread_exit(void* status);

3、執行緒等待

int pthread_join(pthread_t pid,void** return);    

int pthread_detach(pthread_t pid); //等待分離執行緒

函式第1個引數為執行緒id,第2個引數為等待的執行緒返回的狀態位址。函式執行成功返回0,否則阻塞。

4、設定執行緒被取消時的處理函式

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

void pthread_cleanup_pop(int flag);

5、執行緒取消

int pthread_cancel(pthread_t pid);
函式用來向執行緒pid傳送取消操作,實際上,該執行緒不一定會被取消,要根據執行緒狀態決定。

6、設定執行緒狀態是否可被取消

int pthread_setcancelstate(int state,int* oldstate);
函式第1個引數為設定的新狀態值,oldstate用來儲存老的狀態值,函式執行成功返回0,否則返回-1。

新的狀態值有以下兩個選項:

7、設定執行緒的取消型別

int pthread_setcanceltype(int state,int* oldstate);
函式有兩個引數,state為新型別,oldstate儲存原先的老型別。

即使執行緒的取消請求被接受,也會有兩個型別,乙個是立即接受(pthread_cancel_asynchronous),乙個是在取消點時才會接受(pthread_cancel_deferred),執行緒預設的取消型別。

linux之多執行緒

linux系統下的多執行緒遵循posix執行緒介面,稱為pthread 標頭檔案 include 原型 int pthread create pthread t tidp,const pthread attr t attr,void start rtn void void arg 返回值 若執行緒建...

Linux之多執行緒

二 執行緒控制 三 執行緒安全 1 多執行緒優點 執行緒的建立與銷毀成本更低。執行緒的切換排程成本更低。程序間切換時不僅僅要切換程序pcb資訊,還有頁表之類的。2 多執行緒缺點 執行緒將自己的入口函式執行完畢後return退出,main中return退出的是程序 執行緒可以呼叫pthread exi...

Linux網路程式設計之多執行緒

多執行緒模型 在多執行緒模型下,注意共享資料的同步,mutex condition variable rw lock等的使用,local thread storage的使用,另外,可以搭配執行緒池處理非同步計算任務。在c 11中的執行緒庫中已經提供了future相關的工具,合理地使用執行緒模型減少資...