學習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核心消除了個數上的限制,並且...