【问题标题】:How does pthread_exit stop a thread from quitting before completion of its assigned task?pthread_exit 如何阻止线程在完成分配的任务之前退出?
【发布时间】:2012-01-11 05:22:42
【问题描述】:

pthread_exitreturn 0; 之前放置在 main() 中时会阻止线程在完成分配的任务之前退出。

我希望详细了解原因

我在线程应该处理的函数中放置了一个while循环。 while 中的条件不满足,但程序终止。当我在返回 0 之前将 pthread_exit 放在 main 中时,while 循环完成了它的任务。 因此问题。

操作系统:Linux

【问题讨论】:

    标签: linux multithreading pthreads


    【解决方案1】:

    使用return语句从main()返回相当于调用exit()——它终止进程,而不等待其他线程完成。

    调用pthread_exit() 只会退出调用它的线程(即使该线程是运行main() 的线程),因此其他线程将继续运行,直到某个线程调用exit()(或另一个终止进程的函数) ,例如abort()),或者每个线程都已退出。

    【讨论】:

    • main() 是一个函数。它由运行时库在进程的初始线程上自动调用。如果您使用pthread_create() 创建更多线程,那么您的进程中有多个线程。您只能通过 fork()system() 之类的调用获得新进程。
    • 谢谢,你的意思是一个运行 main() 函数的线程是由进程创建的?并且return 语句退出整个process,即使只有一个线程调用它?而为了保留剩余线程,我们使用pthread_exit,它只退出调用线程?
    • 是的。需要明确的是:它只是从退出进程的main() 返回。从任何其他函数返回只是从该函数返回。
    • Anthony,您能否指出我可以阅读有关 main () 线程的资源。它是如何创建和终止的?
    • 调用main()的线程也称为“初始线程”。它由操作系统在进程启动时创建,并通过调用exit() 或调用pthread_exit() 或从线程的初始函数(在本例中为main())返回而终止,就像所有其他线程一样。
    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多