繁体   English   中英

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

[英]pthread - How to start running a new thread without calling join?

我想从主线程开始一个新线程。 我不能使用 join 因为我不想等待线程退出然后恢复执行。
基本上我需要的是 pthread_start(...) 之类的东西,但找不到。

编辑:
由于所有答案都建议 create_thread 应该启动线程,问题是在下面的简单代码中它不起作用。 下面程序的output是“主线程”。 似乎子线程从未执行过。 知道我哪里错了吗?
在 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;
}

启动线程的 function 是pthread_create ,而不是pthread_join 只有在准备好等待和重新同步时才使用pthread_join ,如果分离线程,则根本不需要使用它。 您也可以从不同的线程加入。

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

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

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

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

只需创建将 detached 属性设置为 on 的线程。 为此,您可以在创建线程后调用pthread_detach或在创建线程之前调用pthread_attr_setdetachstate

当一个线程被分离时,父线程不必等待它,也无法获取它的返回值。

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

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

创建线程时,线程会自动启动。

您不需要调用pthread_create吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM