這個問題是在pthread_create的聲明:上在pthread_join(),並在pthread_create()
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *
(*start_routine) (void *), void *arg);
它包含一個函數的start_routine。
所以,當我們調用pthread_create時,函數將執行param arg。
那麼爲什麼有必要調用pthread_join(),因爲要執行start_routine函數?
我也試過不包含pthread_join()函數,事實上start_routine函數根本沒有執行,並且進程在創建後才退出。
所以當程序來到pthread_create時,它究竟會發生什麼? param start_routine的執行是否有條件?
混亂... 這裏是我的測試代碼:
#include <pthread.h>
#include <stdio.h>
int sum;
void* runner(void *param);
int main(int argc, char *argv[])
{
pthread_t tid; //The thread identifier
pthread_attr_t attr;//set of thread attributes
if(argc!=2){
fprintf(stderr, "usage:a.out <integer value>\n");
return -1;
}
if(atoi(argv[1])<0){
fprintf(stderr, "%d must be <=0\n",atoi(argv[1]));
return -1;
}
//get the default attributes
pthread_attr_init(&attr);
//create the thread
pthread_create(&tid,&attr,runner,argv[1]);
//now wait for the thread to exit
pthread_join(tid,NULL);
printf("sum=%d\n", sum);
}
void* runner(void *param)
{
int i,upper = atoi(param);
sum=0;
for(i=1;i<=upper;i++)
sum+=i;
pthread_exit(0);
}
謝謝!我分享了我的測試代碼,並且我想等待總和計算。我只是想知道如何創建包含連接函數?難道它不應該讓跑步者毫不例外地計算嗎?如果我取消了連接函數,那麼和的值就會保持爲0,這意味着create函數沒有執行runner來計算,這與join函數有關,對嗎? – BobHU