首页 / 操作系统 / Linux / 关于pthread_join函数与Linux线程(ref)
pthread_join使一个线程等待另一个线程结束。代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。所有线程都有一个线程号,也就是Thread ID。其类型为pthread_t。通过调用pthread_self()函数可以获得自身的线程号。下面说一下如何创建一个线程。通过创建线程,线程将会执行一个线程函数,该线程格式必须按照下面来声明:void * Thread_Function(void *)创建线程的函数如下:int pthread_create(pthread_t *restrict thread,const pthread_attr_t *restrict attr,void *(*start_routine)(void*), void *restrict arg);下面说明一下各个参数的含义:thread:所创建的线程号。attr:所创建的线程属性,这个将在后面详细说明。start_routine:即将运行的线程函数。art:传递给线程函数的参数。下面是一个简单的创建线程例子:#include <pthread.h>#include <stdio.h>void* print_xs (void* unused){while (1)fputc (‘x’, stderr);return NULL;}int main (){pthread_t thread_id;pthread_create (&thread_id, NULL, &print_xs, NULL);while (1)fputc (‘o’, stderr);return 0;}在编译的时候需要注意,由于线程创建函数在libpthread.so库中,所以在编译命令中需要将该库导入。命令如下:gcc –o createthread –lpthread createthread.c如果想传递参数给线程函数,可以通过其参数arg,其类型是void *。如果你需要传递多个参数的话,可以考虑将这些参数组成一个结构体来传递。另外,由于类型是void *,所以你的参数不可以被提前释放掉。