从main调用pthread_exit可以吗?

use*_*788 13 c winapi program-entry-point pthreads exit

当我打电话pthread_exitmain,程序永远不会终止.我期望程序完成,因为我退出程序的唯一线程,但它不起作用.好像挂了.

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int main(int argc, char *argv[])
{
    printf("-one-\n");

    pthread_exit(NULL);

    printf("-two-\n");
}
Run Code Online (Sandbox Code Playgroud)

Process Explorer显示(仅)线程处于Wait:DelayExecution状态.

根据pthread_exit文件:

在最后一个线程终止后,进程将以退出状态0退出.行为应该就像实现在线程终止时调用带有零参数的exit()一样.

我正在使用Dev-C++ v4.9.9.2pthreads-win32 v2.8.0.0(链接libpthreadGC2.a).

该库似乎是确定(例如,呼叫pthread_selfpthread_createmain正常工作).

是否有什么我不应该调用任何理由pthread_exitmain

tor*_*rak 16

那么它在Linux执行并行线程的肯定合法,请参见注释部分pthreads_exit.它指出

要允许其他线程继续执行,主线程应该通过调用pthread_exit()而不是exit(3)来终止.

此外,在这里查看源代码(扭转末尾)表明它大致转换为_endthread或_endthreadex.这里的文档没有提到在初始线程中没有调用它.


Jen*_*edt 15

这完全合法和预期的行为.整个过程仅在所有线程终止或exit显式或隐式调用时结束.

正常的返回来自main等同于对exit.的调用.如果结束mainpthread_exit你在说明确你想要的其他线程继续.