为什么这段代码没有运行?

Dav*_*ifi 2 c multithreading pthreads

void myThread(void *arg) {
    printf("Thread ran!\n");
    pthread_exit( NULL );
}

int main() {
    int ret;
    pthread_t mythread;
    ret=pthread_create(&mythread,NULL,myThread,NULL);
    if (ret != 0) {
            printf( "Can’t create pthread (%s)\n", strerror(errno ) );
            exit(-1);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lin 9

因为main在线程有机会执行之前立即返回 - 尝试添加sleep(1000);之前return 0;,你可能会发现它有效.

如果你想main等到线程完成,请尝试pthread_join(但是你可能根本就没有线程).

pthread_join(mythread, 0);
return 0;
Run Code Online (Sandbox Code Playgroud)

  • 或者你可以在`main()`中调用`pthread_exit()`而不是正常的返回.这将阻止从`main()`返回的隐式`exit()`执行,因此程序将继续运行,直到所有线程都退出.请注意,如果您使用pthread-win32端口在Windows上运行,则无法工作(退出Windows上的"main"线程会终止该过程). (2认同)

Yan*_*aud 5

您必须在主线程中等待,pthread_join()调用后使用pthread_create()