2016-11-09 33 views
2

我想实现的东西与C. P线程程序现在,我试图让一个线程打印的东西:打印单的Pthread

void * generator(void *arguments){ 
    printf("Hi"); 
    return NULL; 
} 

int main(int argc, const char* argv[]){ 
    pthread_create(&threads_ids[0], NULL, &generator, NULL);= 
} 

这不工作,没有按”不打印任何东西。但是,当我在for循环中创建pthread时,它确实打印出“Hi”,但在每次执行时,事件都会有所不同。

这是正常的行为,如果是这样的话;我该如何解决它?提前致谢!

+1

将新行添加到输出格式。否则消息不会出现(除非您刷新它们)。当你忽略命令行参数时使用'int main(void)'。 –

回答

7

这是因为您的主线程返回并因此退出过程。这意味着你创建的线程永远不会有机会运行。

不同于从main()返回,从main()调用pthread_exit(0),将让其他线程继续执行。

或者,您可以通过在您创建的线程上调用pthread_join()来等待线程完成执行。

当你在一个循环中执行时,你创建的一些线程可能会在主线程退出之前被执行,从而显示“工作”(打印一些Hi)。 但它确实与您发布的代码具有相同的问题。