码迷,mamicode.com
首页 > 编程语言 > 详细

UNIX环境高级编程之----多线程技术(2)

时间:2015-07-12 09:40:26      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:unix   线程   多线程   unix信号   编程   

     创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthread_create。在线程创建之后,就开始运行相关的线程函数。在该函数运行结束,线程也会随着退出。这是其中退出线程的一种方法,另外一种退出线程的方法就是调用pthread_exit()函数接口,这是结束函数的主动行为。在这里要注意的是,在使用线程函数时,不要轻易调用exit()函数,因为这样会使整个进程退出,往往一个进程包含着多个线程,所以调用了exit()之后,所有该进程中的线程都会被结束掉。因此,在线程中,利用pthread_exit来替代进程中的exit。

     由于一个进程中的数据段是共享的,因此通常在线程退出之后,退出线程所占的资源并不会随着线程的结束而得到释放。正如进程之间可以调用wait()函数来同步中指并释放资源一样,线程之间也有类似的机制,那就是pthread_join函数.pthread_join可以将当前线程挂起,等待线程的结束,这个函数是一个阻塞函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待函数的资源就会被释放。

1、函数语法简述。

pthread_create

头文件:       pthread.h

函数原型:    int pthread_create (pthread_t* thread, pthread_attr_t* attr,

                                                  void* (start_routine)(void*), void* arg);

函数传入值: thread: 线程标识符

                   attr: 线程属性设置

                   start_routine:线程函数入口

                   arg:传递给线程函数的参数

返回值:       0: 成功

                   -1: 失败 

pthread_exit

头文件:      pthread.h

函数原型:   void pthread_exit (void*  retval);

函数传入值:retval:pthread_exit()调用者线程的返回值,可又其他函数如pthread_join来检索获取。

phread_join

头文件:      pthread.h

函数原型:   int pthread_join (pthread_t* thread, void** thread_return);

函数传入值:thread:等待线程的标识符。

                  thread_return:用户定义的指针,用来存储被等待线程的返回值(不为NULL值);

函数返回值:成功: 0

                  失败:-1


#include <stdlib.h>    
#include <stdio.h>    
#include <pthread.h>    
#include <errno.h>    
     
static void* pthread_func_1 (void*);    
static void* pthread_func_2 (void*);    
    
int main (int argc, char** argv)    
{    
  pthread_t pt_1 = 0;    
  pthread_t pt_2 = 0;    
  int ret = 0;    
     
  ret = pthread_create (&pt_1, NULL, pthread_func_1, NULL);    
  if (ret != 0)    
  {    
     perror ("pthread_1_create");    
  }    
    
  ret = pthread_create (&pt_2, NULL, pthread_func_2, NULL);    
  if (ret != 0)    
  {    
      perror ("pthread_2_create");    
   }    
     
   pthread_join (pt_1, NULL);    
   pthread_join (pt_2, NULL);    
     
   return 0;    
}    
     
static void* pthread_func_1 (void* data)    
{    
   int i = 0;    
       
   for (; i < 6; i++)    
   {    
     printf ("This is pthread1!\n");    
     
     if (i == 2)    
     {    
       pthread_exit (0);    
     }    
     
     sleep (1);    
   }    
  
   return NULL;  
}    
     
static void* pthread_func_2 (void* data)    
{    
   int i = 0;    
     
   for (; i < 3; i++)    
   {    
     printf ("This is pthread2!\n");    
   }    
     
   pthread_exit (0);    
  
   return NULL;  
}    

运行结果:g++ linux1.cpp -o pthread -lpthread

[uglychen@chenxun linux_chen]$ ./pthread 
This is pthread1!
This is pthread2!
This is pthread2!
This is pthread2!
This is pthread1!
This is pthread1!





版权声明:本文为博主原创文章,未经博主允许不得转载。

UNIX环境高级编程之----多线程技术(2)

标签:unix   线程   多线程   unix信号   编程   

原文地址:http://blog.csdn.net/chenxun_2010/article/details/46846071

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!