[英]Main thread does not continue execution after pthread_create()
我使用pthread_create()
创建了一个线程。 新线程已成功创建,控件将传递给新创建的线程。 但是,似乎主线程不再执行了。 主线程处于无限循环中,永不退出。 以下是代码片段:
void *start_routine(void)
{
printf("Start routine reached!\n");
fflush(stdout);
printf("Pthread returning!\n");
fflush(stdout);
return NULL;
}
void create_thread()
{
pthread_t newThread;
printf("Thread create reached!!\n");
fflush(stdout);
/* Create the new thread */
if((pthread_create(&newThread, NULL, start_routine , NULL)) != 0 ){
perror("pthread_create");
fflush(stdout);
}
printf("Thread create done!!\n");
fflush(stdout);
return;
}
输出是:
Thread create reached!!
Start routine reached!
Pthread returning!
我没有看到“Thread create done !!” 正在打印,程序只是停留在这一点上。
任何指针都会有所帮助。 谢谢!
它应该由你错误的start_routine
签名引起。 pthread_create
的入口例程的标准签名是void *(*start_routine)(void *)
。 在pthread_create
实现中,如果调用start_routine
,使用start_routine
的参数,在你的情况下, create_thread
为它提供值NULL
,因此,在pthread_create
,在调用start_routine
之前将NULL
压入堆栈,但是, start_routine
不会恢复堆栈作为pthread_create
(完全是由pthread_create
调用的内部例程)期望,在start_routine
完成后,堆栈超出预期,并且可能遇到地址NULL
,这可能导致程序很快中止。
通过堆栈传输参数时会发生此问题。 要纠正它,只需将start_routine
更正为void *start_routine(void* args)
。 并且,在主线程中,调用pthread_join
来等待生成的线程完成,否则,资源泄漏将是一个潜在的问题。
如果您对Linux NPTL pthread_create
内部工作感兴趣,可以访问http://raison.gegahost.net/?p=91 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.