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

时间:2011-05-31 08:03:51

标签: 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;
}

7 个答案:

答案 0 :(得分:18)

启动线程的函数是pthread_create,而不是pthread_join pthread_join。您准备等待时只能使用exit, 并重新同步,如果您分离线程,则无需使用 它一点都没有。您也可以从其他主题加入。

退出之前(通过调用main或从{{1}}返回), 你必须确保没有其他线程在运行。一种方式(但不是 唯一的做法就是加入你所有的线程 创建

答案 1 :(得分:6)

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

答案 2 :(得分:3)

join调用等待线程终止并退出。

如果您希望主线程在子线程执行时继续执行,请不要调用join:子线程将与主线程同时执行...

答案 3 :(得分:2)

只需创建分离属性设置为on的线程即可。要实现此目的,您可以在创建线程后调用pthread_detach,也可以在创建线程之前调用pthread_attr_setdetachstate

分离线程时,父线程不必等待它,也无法获取其返回值。

答案 4 :(得分:1)

你需要在man()的末尾调用pthread_exit,这将导致main等待其他线程启动和退出。 或者您可以显式调用pthread_join来等待新创建的线程

否则,当main返回时,进程被终止,并且它创建的所有线程都将被终止。

答案 5 :(得分:0)

当你create时,线程会自动启动。

答案 6 :(得分:0)

您是否只需要拨打 pthread_create

static void *thread_body(void *argument) { /* ... */ }

int main(void) {
    pthread_t thread;
    pthread_create(&thread, NULL, thread_body, NULL);
    /* ... */