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

  • 1
  • 2
  • 下一页

相关内容