我正在使用pthread来启动线程,但create函数本身并没有启动线程但如果我调用pthreadjoin,它就会启动,所以实际上我应该调用p线程join吗?
我从一些答案中听说pthreadjoin是不需要的,我的pthreadcreate函数是从主调用的
int main(void) {
printf("-----------Welcome------n");
Start_Generation();
return 0;
}
int Start_Generation(void)
{
ret=pthread_create(&C_AO_GENERATION_THREAD, NULL, C_Aogeneration_thread,(void*) message1);
if(ret!=0)
{
printf("Error Starting Threadn");
return -1;
}
else
{
printf("AO Thread Startedn");
}
//ret=pthread_join(C_AO_GENERATION_THREAD, NULL);
return 0;
}
void *C_Aogeneration_thread (void *ptr)
{
char *message;
message = (char *) ptr;
unsigned int prof_gen_count;
unsigned int written_sample=0;
unsigned int curr_idx=0;
int ch=0;
int written=0;
printf("%s",message);
printf(" Generation Startedn");
prof_gen_count=(samplingrate/10);
while(stopflag)
{
printf("Thread is workingn");
}
return 0;
}
enter code here
我正在使用pthread来启动线程,但create函数本身并没有启动线程
如问题所示,您的主线程在报告pthread_create()
调用的成功或失败后立即从main
返回,从而终止,因此
-
整个程序在这一点上终止,显然是在孩子进步到足以证明它正在运行之前,还有
-
使用单独的线程是没有意义的。
但是如果我调用pthreadjoin,它就会启动,所以实际上我应该调用p线程join吗?
在指定线程终止之前,对pthread_join()
的调用不会成功返回。事实上,这就是它的目的。根据经验,您应该连接或分离您创建的每个线程。连接通常是你想要的,也要注意,分离线程并不能阻止进程在主线程返回或exit()
s时终止并带走该线程。