pthread - 如何在不调用join的情况下开始运行新线程?

Oha*_*esh 14 c c++ linux multithreading pthreads

我想从主线程开始一个新线程.我不能使用join,因为我不想等待线程退出而不是继续执行.
基本上我需要的是像pthread_start(...),但是找不到它.

编辑:
因为建议create_thread的所有答案应该启动线程问题是在下面的简单代码中它不起作用.以下程序的输出是"主线程".看起来子线程从未执行过.知道我错了吗?
在Fedora 14 GCC 4.5.1版上编译并运行

void *thread_proc(void* x)
{
   printf ("sub thread.\n");
   pthread_exit(NULL);
}


int main()
{
    pthread_t t1;
    int res = pthread_create(&t1, NULL, thread_proc, NULL);
    if (res)
    {
        printf ("error %d\n", res);
    }

    printf("main thread\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*nze 20

启动线程的功能pthread_create不是 pthread_join.您只pthread_join在准备等待和重新同步时使用,如果您分离线程,则根本不需要使用它.您也可以从其他线程加入.

在退出之前(通过调用exit或从返回main),您必须确保没有其他线程正在运行.实现此目的的一种方式(但不是唯一的方法)是加入您创建的所有线程.

  • @Klas Lindback调用`exit()`将终止整个进程,这当然会终止所有线程.但这不是一个瞬间的过程; 有一个很长的步骤列表`exit`,并且终止线程接近它们的末尾.与此同时,已经调用了静态变量的析构函数,内存结构(包括`malloc`?)的清理等等.同时,其他线程继续运行,最终使用已清理的资源.C++ 11还增加了限制. (2认同)

use*_*672 7

代码的行为取决于调度程序; 可能主程序在创建的线程中的printf执行之前退出.我希望main()末尾的简单睡眠(some_seconds)会导致线程输出出现:)