c-Pthread create没有启动线程



我正在使用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返回,从而终止,因此

  1. 整个程序在这一点上终止,显然是在孩子进步到足以证明它正在运行之前,还有

  2. 使用单独的线程是没有意义的。

但是如果我调用pthreadjoin,它就会启动,所以实际上我应该调用p线程join吗?

在指定线程终止之前,对pthread_join()的调用不会成功返回。事实上,这就是它的目的。根据经验,您应该连接或分离您创建的每个线程。连接通常是你想要的,也要注意,分离线程并不能阻止进程在主线程返回或exit()s时终止并带走该线程。

最新更新