執行緒在unix系統下,通常被稱為輕量級的程序,執行緒雖然不是程序,但卻可以看作是unix程序的表親,同一程序中的多條執行緒將共享該程序中的全部系統資源,如虛擬位址空間,檔案描述符和訊號處理等等。但同一程序中的多個執行緒有各自的呼叫棧(call stack),自己的暫存器環境(register context),自己的執行緒本地儲存(thread-local storage)。 乙個程序可以有很多執行緒,每條執行緒並行執行不同的任務。
執行緒可以提高應用程式在多核環境下處理諸如檔案i/o或者socket i/o等會產生堵塞的情況的表現效能。在unix系統中,乙個程序包含很多東西,包括可執行程式以及一大堆的諸如檔案描述符位址空間等資源。在很多情況下,完成相關任務的不同**間需要交換資料。如果採用多程序的方式,那麼通訊就需要在使用者空間和核心空間進行頻繁的切換,開銷很大。但是如果使用多執行緒的方式,因為可以使用共享的全域性變數,所以執行緒間的通訊(資料交換)變得非常高效。
建立執行緒 pthread_create
執行緒建立函式包含四個變數,分別為: 1. 乙個執行緒變數名,被建立執行緒的標識 2. 執行緒的屬性指標,預設為null即可 3. 被建立執行緒的程式** 4. 程式**的引數
for example: - pthread_t thrd1; - pthread_attr_t attr; - void thread_function(void argument); - char *some_argument;
pthread_create(&thrd1, null, (void *)&thread_function, (void *) &some_argument)
結束執行緒 pthread_exit
執行緒結束呼叫例項:pthread_exit(void *retval); //retval用於存放執行緒結束的退出狀態
執行緒等待 pthread_join
pthread_create呼叫成功以後,新執行緒和老執行緒誰先執行,誰後執行使用者是不知道的,這一塊取決與作業系統對執行緒的排程,如果我們需要等待指定執行緒結束,需要使用pthread_join函式,這個函式實際上類似與多程序程式設計中的waitpid。 舉個例子,以下假設 a 執行緒呼叫 pthread_join 試圖去操作b執行緒,該函式將a執行緒阻塞,直到b執行緒退出,當b執行緒退出以後,a執行緒會收集b執行緒的返回碼。 該函式包含兩個引數:
pthread_t th //th是要等待結束的執行緒的標識
void **thread_return //指標thread_return指向的位置存放的是終止執行緒的返回狀態。
呼叫例項:pthread_join(thrd1, null);
計算0-1000000的總和
#include#include#include#include#includeusing namespace std;
int64_t end,now,start,sum;
pthread_mutex_t now_t;
void *add(void* arg)
┊ sum+=now;
┊ now++;
┊ pthread_mutex_unlock(&now_t);}}
int main(int argc,char *ar**)
int num_of_thread=0;
num_of_thread=atoi(ar**[2]);
┊end=atoi(ar**[1]);
pthread_t tid[num_of_thread];
for(int i = 0;i < num_of_thread;i++)
for(int i=0;iprintf("sum = %lld\n",sum);
return 0;
}
C語言多執行緒
首先多執行緒需要乙個標頭檔案進行導包 include 接下來我們需要弄乙個執行緒變數,建立到 都可以,不過推薦建立到外邊,比如pthread t th1 接下來我們開始建立執行緒,如果是大型工程的話,建議放到乙個函式裡邊,這個語句是pthread create th1,null,awm,null 如...
C語言多執行緒
pthread create的含義為 intpthread create pthread t tidp,constpthread attr t attr,void start rtn void void arg pthread ttidp為指向執行緒識別符號的指標。constpthread attr...
C 語言多執行緒程式設計
一 linux 下相關函式 函式描述 intpthread create pthread t thread,pthread attr t attr,void start routine void void arg 建立乙個新的執行緒。編譯時帶上 lpthread.引數說明 thread 是乙個指標,...