用Pthread實現多執行緒操作

2021-09-24 07:23:04 字數 2907 閱讀 6016

學習pthread時的筆記和demo,感謝各路大神的分享
#include 

#include

void * thread(void *arg)

int main(int argc, char const *ar**)

printf("main thread.\n");

int *thread_res = null;

res = pthread_join(tid, (void **)&thread_res);

if (res != 0 || !thread_res)

printf("thread return val = %d\n", *thread_res);

return 0;

}複製**

執行緒的合併是一種主動**執行緒資源的方案。當乙個程序或執行緒呼叫了針對其它執行緒的pthread_join()介面,就是執行緒合併了。這個介面會阻塞呼叫程序或執行緒,直到被合併的執行緒結束為止。當被合併執行緒結束,pthread_join()介面就會**這個執行緒的資源,並將這個執行緒的返回值返回給合併者。

與執行緒合併相對應的另外一種執行緒資源**機制是執行緒分離,呼叫介面是pthread_detach()。執行緒分離是將執行緒資源的**工作交由系統自動來完成,也就是說當被分離的執行緒結束之後,系統會自動**它的資源。因為執行緒分離是啟動系統的自動**機制,那麼程式也就無法獲得被分離執行緒的返回值,這就使得pthread_detach()介面只要擁有乙個引數就行了,那就是被分離執行緒控制代碼。

呼叫pthread_create()函式,執行緒要麼是合併的(預設)要麼是分離的。如果是合併屬性的執行緒,那麼必須使用pthread_join()等待結束,否則所占用的資源不會得到釋放從而造成資源洩露。而分離屬性的執行緒在結束的時候會自動釋放所占用的資源。

乙個合併屬性執行緒只能用乙個pthread_join()函式來等待結束。如果有多個pthread_join函式則只有第乙個執行到的有效,其他的都會直接返回錯誤。

#include 

#include

void * func(void *a)

int main(int argc, char *ar**)

複製**

#include 

#include

#include

void * func(void *arg)

printf("tid %d result = %e\n",tid,result);

printf("tid %d end\n",tid);

return null;

}int main(int argc, char const *ar**)

}pthread_attr_destroy(&attr);

for (int i = 0;i < len;++i)

printf("thread %d joined\n",i);

}return 0;

}複製**

#include 

#include

void * start(void *a)

int main(int argc, char const *ar**)

複製**

#include 

#include

#include

#include

#include

pthread_mutex_t mutex;

int sharedvar = 0;

void * func1(void *arg)

else

if (ret == einval)

else

if (ret == 0)

sleep(1);

}return null;

}void * func2(void *arg)

return null;

}int main(int argc, char *ar**)

複製**

#include 

#include

#include

pthread_mutex_t mutex;

pthread_cond_t cond;

typedef struct

buffer;

buffer shareddata = ;

char ch = 'a';

void * producer(void *arg)

}pthread_mutex_unlock(&mutex);

}printf("producer end\n");

return null;

}void * consumer(void *arg)

printf("\n");

pthread_mutex_unlock(&mutex);

}printf("consumer end\n");

return null;

}int main(int argc, char *ar**)

複製**

#include 

#include

#include

pthread_key_t key;

typedef struct

threaddata;

void * func(void *arg)

void deconstruct(void *arg)

int main(int argc, char *ar**)

for (int i = 0; i < len; ++i)

pthread_key_delete(key);

return 0;

}複製**

pthread 多執行緒

多執行緒程式指的是在同乙個程式中多個執行流併發執行,它們共享程序的同乙個位址空間,分別完成相應的任務,並通過共享位址空間等方式完成執行緒間通訊,cpu按照時間片輪轉等方式對執行緒進行切換和排程。通常而言,執行緒共享的程序資源包括 linux中線程的建立依賴於lpthread.so 庫,建立乙個thr...

pthread建立多執行緒

include include include include include include include include include include include tinyxml tinyxml.h include include include include define macxm...

Linux 多執行緒 pthread

1.linux執行緒的發展 早在linux2.2核心中。並不存在真正意義上的執行緒,當時linux中常用的執行緒pthread實際上是通過程序來模擬的,也就是同過fork來建立 輕 程序,並且這種輕程序的執行緒也有個數的限制 最多只能有4096和此類執行緒同時執行。2.4核心消除了個數上的限制,並且...