I have sort of a homework and it asks me to end the program gracefully without explicit termination such as calling exit() or killing the threads.
However I cannot think of any other methods than return 0
, so what are the methods to end a program gracefully?
6 回答
杀死线程绝对不是终止程序的优雅方式。我认为您的讲师的意思是您的所有线程都应该在终止自己之前parent
等待它们的线程。child
理想情况下,pthread_exit
来自主线程的显式调用将确保它的所有子线程即使在退出后也能继续运行。请参阅此链接。但是,在退出之前等待子线程的最安全方法是使用pthread_join
.
然而,exit(0)
这样的过程是优雅的回报。
我认为您没有告诉我们您有一个多线程程序。我想优雅地终止程序的想法是为了通过设置一个标志或类似的东西来终止你的所有线程。然后只main
在所有线程都可证明结束后终止你的。你实际终止你的方式并不main
重要。
exit(0)
通常表示进程(您的程序)正常终止。如果出现错误,它会exit(-1)
或其他一些错误代码。
不知道它们优雅地意味着什么,但我的第一个想法只是返回 0。
或退出(0)
见我的评论。
main
在缺少语句的情况下默认返回0 。return 0;
请参阅 C99 标准的 §5.1.2.2.3¶1。
如果
main
函数的返回类型是与 兼容的类型int
,则从函数的初始调用返回main
相当于以exit
函数返回的值main
作为参数调用函数;到达}
终止main
函数的返回值0
。如果返回类型与 不兼容int
,则返回给宿主环境的终止状态是未指定的。
因此,以下内容虽然隐式但优雅地终止,与显式exit
或return
in区别开来main
。
main() { }
他们可能指的是您如何处理低级例程中的错误。而不是做类似的事情
printf("ERROR: couldn't initialize the claveman\n");
exit(1);
您将从该例程返回(可能在该级别打印错误消息或等待在 main() 等更高级别执行此操作)。
return CLAVEMAN_INITIALIZE_ERROR;
您的所有例程都将返回零表示成功或非零错误代码,直到 main 中的代码能够返回 EXIT_SUCCESS 或指示失败的错误代码。