Chinaunix首页 | 论坛 | 博客
  • 博客访问: 446759
  • 博文数量: 145
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1060
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-22 11:52
个人简介

专注计算机技术: Linux Android 云计算 虚拟化 网络

文章分类

全部博文(145)

文章存档

2016年(3)

2015年(21)

2014年(75)

2013年(46)

我的朋友

分类: LINUX

2015-01-14 15:26:46

原文出处:http://blog.csdn.net/Frozen_fish/archive/2007/07/06/1680754.aspx

函数原型如下:


void pthread_exit( void * value_ptr );

线程的终止可以是调用了pthread_exit或者该线程的例程结束。也就是说,一个线程可以隐式的退出,也可以显式的调用pthread_exit函数来退出。



pthread_exit函数唯一的参数value_ptr是函数的返回代码,只要pthread_join中的第二个参数value_ptr不是NULL,这个值将被传递给value_ptr。


函数原型如下:



int pthread_join( pthread_t  thread, void * * value_ptr );

函数pthread_join的作用是,等待一个线程终止。


调用pthread_join的线程将被挂起直到参数thread所代表的线程终止时为止。pthread_join是一个线程阻塞函数,调用它的函数将一直等到被等待的线程结束为止。

如果value_ptr不为NULL,那么线程thread的返回值存储在该指针指向的位置。该返回值可以是由pthread_exit给出的值,或者该线程被取消而返回PTHREAD_CANCELED。


当一个非分离的线程终止后,该线程的内存资源(线程描述符和栈)并不会被释放,直到有线程对它使
用了pthread_join时才被释放。因此,必须对每个创建为非分离的线程调用一次pthread_join调用,以避免内存泄漏。否则当线程是可分
离的,调用pthread_exit,将终止该调用线程,并释放所有资源,没有线程等待它终止。

至多只能有一个线程等待给定的线程终止。如果已经有一个线程在等待thread线程终止了,那么再次调用pthread_join等待同一线程的线程将返回一个错误。


//example_2.c
#include <stdio.h>
#include 
<pthread.h>

void * pthread_func_test(void * arg);

int main()
{
   
pthread_t pt1,pt2;
    pthread_create(
&pt1,NULL,pthread_func_test,"This is the Thread_ONE");
   
pthread_create(
&pt2,NULL,pthread_func_test,"This is the Thread_TWO");
   
pthread_join(pt1,NULL);
    pthread_join(pt2,NULL);        
//这行不写,会发生什么?或写成pthread_join(pt1,NULL);又会怎么样?
}


void * pthread_func_test(void * arg)
{
   
printf(
"%s  ",arg);
   
pthread_exit(NULL);            
//显式声明
}
到此为止,我们就学习了三个重要的函数--create、exit、join

阅读(1957) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~