Linux—pthread_join()的使用

以我目前的知识储备,我对线程执行的理解就是:在一个进程中创建了一个线程,此线程调用了一个函数,可以在进程中通过这个线程所调用的函数来执行一些其他工作,或者辅助进程工作。由于CPU是单核,一般的来讲只要进程一直处于main程序的运行过程时,线程所调用的函数是不会执行的,因为进程没有给线程留有执行的时间。要想使线程执行,一般的操作就是使进程休眠一段时间,通过sleep()函数可以实现,在进程休眠的这段时间内,线程的可以运行。进程的休眠通常实在创建完线程之后,还有一种方法,可以让线程在程序运行到指定的步骤来执行线程,这就是pthread_join()函数。
创建好一个线程后,在进程中调用pthread_join()可以使进程等待线程执行完毕,这个函数是一个线程阻塞函数,调用它的进程将一直等待到线程执行完毕为止,而且当函数返回时,线程的资源将被收回。
如果一个线程运行结束但没有被join,则此线程的状态就像进程中的Zombie Process,所以一般最好使用pthread_join()来等待线程运行结束,并且可以得到线程的返回值并释放线程资源。
函数原型:

#include <pthread.h>

int pthread_join( pthread_t thread, void **value_ptr );
  • thread:进程要等待的线程的id,线程的id可以在创建线程的时候获取
  • value_ptr:一个用户定义的指针,用来存储线程的返回值,通常会定义一个指针,通过指针的地址来存储线程的返回值。比如:
void *p;
error = pthread_join( tid, &p );
  • 返回值:若阻塞成功则返回0;不成功返回出错的编号,通常把接收返回值的变量命名为error,这样其含义就更容易理解,可以通过如下代码来判断阻塞的成功与否:
if( error )
{
	printf("thread join failed!\n");
}
发布了62 篇原创文章 · 获赞 188 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43743762/article/details/101097144