Linux下C語言實現多執行緒排序檔案內容

2021-10-06 14:49:54 字數 1870 閱讀 8665

pthread_create

功能

pthread_create是unix環境建立執行緒函式

函式原型

int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);

第乙個引數為指向執行緒識別符號的指標。

第二個引數用來設定執行緒屬性。

第三個引數是執行緒執行函式的位址。

最後乙個引數是執行函式的引數。

返回值

若成功則返回0,否則返回出錯編號

pthread_join

功能

函式pthread_join用來等待乙個執行緒的結束。

函式原型

extern int pthread_join __p (pthread_t __th, void **__thread_return);

第乙個引數為被等待的執行緒識別符號

第二個引數為乙個使用者定義的指標,它可以用來儲存被等待執行緒的返回值。

注意

這個函式是乙個執行緒阻塞的函式,呼叫它的函式將一直等待到被等待的執行緒結束為止,當函式返回時,被等待執行緒的資源被收回。如果執行成功,將返回0,如果失敗則返回乙個錯誤號。

這兩函式的標頭檔案為 #include,在編譯時需加上-lpthread引數,以呼叫靜態鏈結庫。因為pthread並非linux系統的預設庫。 

#include #include #include #include#include #include #include static pthread_t id1,id2;

static char filepathlist[10][100];//存放檔案路徑

//qsort比較器

int cmp(const void *a, const void *b)

//執行緒1,排序0、2、4、6、8

void funone(int thread_num)

printf("\n");

fclose(fp);

qsort(t,i,sizeof(t[0]),cmp);//排序檔案內容

printf("thread %d 排序後%d檔案內容:\n",thread_num,index);

fp=fopen(filepathlist[index],"w");//覆寫

for(j=0; j0)

printf("\n");

fclose(fp);

qsort(t,i,sizeof(t[0]),cmp);//排序檔案內容

printf("thread %d 排序後%d檔案內容:\n",thread_num,index);

fp=fopen(filepathlist[index],"w");//覆寫

for(j=0; j首先需要10個要排序的檔案,程式執行後會將排序好的內容覆蓋掉原來的檔案內容

多執行緒併發執行下,每次列印的資訊不太一樣,但最終儲存到檔案的排序結果是一樣的 。

該程式用到了儲存路徑的全域性變數,而且每個執行緒處理的檔案沒有衝突,所以**裡不需要互斥鎖或條件變數來實現。

多執行緒 簡單的執行緒建立,C語言實現

執行緒,是計算機中最小的執行單元。通常,在window應用程式執行時,作業系統都會為其自動建立乙個執行緒,即主線程。通過主線程,可以建立多個執行緒或程序。使用多執行緒,可以提高程式的執行效率。執行緒建立函式createthread 屬於api函式 函式原型為 handle createthread ...

多執行緒 簡單的執行緒建立,C語言實現

執行緒,是計算機中最小的執行單元。通常,在window應用程式執行時,作業系統都會為其自動建立乙個執行緒,即主線程。通過主 執行緒,可以建立多個執行緒或程序。使用多執行緒,可以提高程式的執行效率。執行緒建立函式createthread 屬於api函式 函式原型為 handle createthrea...

Linux下C語言多執行緒例項

建立兩個執行緒訪問互斥資料,對其加1輸出。這是乙個多執行緒最常見的例子 include include include include define max 10 pthread t thread 2 pthread mutex t mut int number 0,i void thread1 p...