C++新建線程實例

 此代碼需在linux 系統下運行,windows下不能夠,貌似要下個包。具體google.java

pthread_create的函數原型爲:linux

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);

pthread_join函數原型爲:
int pthread_join(pthread_t thread, void **value_ptr);

#include <pthread.h>ios

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <iostream>

using namespace std;c++


//mythread名字能夠任意起,只要在容許的範圍內
void *  mythread(void * ){
while(true){
         printf("===child thread print1\n");
sleep(1);
printf("====child thread print2\n");
}
}
int main(void){
pthread_t t;
int ret;
ret=pthread_create(&t,NULL,mythread,NULL);//此處第三個參數mythread表示傳進去的是mythread函數的地址,能夠用&mythread,
if(ret!=0){
  printf("create thread failed \n");
exit(1);
}
while(true){
printf("-----main thread is running1 \n");
sleep(1);
printf("-----main thread is running2\n");
}
pthread_join(t,NULL);
return 0;

}windows


編譯gcc test.cpp -pthread -lstdc++函數

運行 ./a.out google

能夠看到主線程和子線程交替打印信息。spa

關於pthread_join的解釋不少都是這麼說的:線程

       「代碼中若是沒有pthread_join主線程會很快結束從而使整個進程結束,從而使建立的線程沒有機會開始執行就結束了。加入pthread_join後,主線程會一直等待直到等待的線程結束本身才結束,使建立的線程有機會執行。」code

經過打印結果看貌似是對的,跟java 線程中的join的效果不同。java中被join的線程必須運行完了,調用方纔接着運行。而這裏是能夠一塊兒運行的。

相關文章
相關標籤/搜索