关于pthread_join函数与Linux线程(ref)

2014-11-24 01:22:53 · 作者: · 浏览: 4

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


#include


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 *,所以你的参数不可以被提前释放掉。