0

我对 pthread_join() 有疑问,希望大家回答。我正在运行下面的程序,并且要打印一行。之后,我试图删除“pthread_join(th,&val),并且没有要打印的行。

我发现了程序中的所有功能,但我不明白为什么。

你能帮我吗,我很感激所有的答案。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define SMALL_STACK 131072

pthread_attr_t thread_attr;
void* fn(void* arg);
int main(int argc, char** argv)
{
    pthread_attr_init(&thread_attr);
    pthread_attr_setstacksize(&thread_attr, SMALL_STACK);

    pthread_t th;

    pthread_create(&th, &thread_attr, fn, (void*)14);
    void* val;
    pthread_join(th, &val);

    return 0;
}

void* fn(void* arg)
{
    printf("arg = 0x%x\n", (int)arg);
    return NULL;
}
4

1 回答 1

4

是的,这pthread_join就是应该做的。它让调用线程等待,直到创建的线程完成其工作。如果你没有它,你的线程会在你的线程有机会打印main之前终止整个进程。fn

如果出于某种原因您想终止main线程并保持进程的所有其他线程运行,则必须使用 终止它pthread_exit,而不是使用return语句或调用exit.

于 2015-03-14T15:05:44.803 回答