我想从主线程开始一个新线程。我不能使用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;
}
答案 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);
/* ... */