我正在用C语言实现一个程序,现在,我尝试让一个线程打印"Hi":
void * generator(void *arguments){
printf("Hi");
return NULL;
}
int main(int argc, const char* argv[]){
pthread_create(&threads_ids[0], NULL, &generator, NULL);=
}
这不起作用,也不印任何东西。但是,当我将创建的线程放在for循环中时,它确实会打印"Hi",但是在每次执行时发生的情况是不同的。
这是正常的行为吗?如果是的话,我该如何解决呢?提前感谢!
发布于 2016-11-09 19:12:32
这是因为主线程返回并因此退出进程。这意味着您创建的线程永远没有机会运行。
与仅仅从main()返回不同,从main()调用pthread_exit(0)
将允许其他线程继续执行。
或者,您可以通过在创建的线程上调用pthread_join()
来等待线程完成执行。
当您在循环中执行时,您创建的一些线程可能会在主线程退出之前执行,因此看起来“工作”(打印一些Hi
)。但它确实存在着与你发布的代码相同的问题。
https://stackoverflow.com/questions/40514240
复制相似问题