[英]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.