Posix线程基本问题C.

嘿伙计们,我对我正在测试开始理解posix线程的一些代码有疑问.

我有这个基本代码:

#include <iostream>
#include <string>
#include <sstream>
#include <pthread.h>
using namespace std;
void *printInfo(void *thid){
    long tid;
    tid =(long)thid;
    printf("Hello from thread %ld.\n",tid);
    pthread_exit(NULL);
}    
int main (int argc, char const *argv[])
{
    int num =8;
    pthread_t threadlist[num];
    int rc;
    long t;
    for(t=0;t<num;t++){
        printf("Starting thread %ld\n",t);
        rc = pthread_create(&threadlist[t],NULL,printInfo,(void *)t);
        if(rc)
        {
            printf("Error creating thread");
            exit(-1);

        }
    }
        pthread_exit(NULL);
    return 0;
}

非常简单的代码,启动线程并从它们打印,除了我不理解返回0之前的最后一个pthread_exit(NULL)之外,所有的工作都很奇怪;在主要方法的最后.

似乎主线程不应该是pthread,并且不应该需要它!
如果我不把它,代码不起作用(意味着代码编译,并执行,但我只得到“开始线程”打印消息,而不是“hello from …”消息.

所以基本上我想知道为什么需要它.

此外,如果我注释掉包含,代码将编译并正确执行

如果你不在main函数中使用pthread_exit,那么所有创建的线程都将作为主要结束终止,即在你打印任何东西之前.

通过在main函数中调用pthread_exit使main等待直到所有线程都完成.

从pthread_exit手册页:

The process will exit with an exit status of 0 after the last thread has been terminated. The behavior is as if the implementation called exit() with a zero argument at thread termination time.

这是指从主进程线程调用pthread_exit().

相关文章
相关标签/搜索