多线程编程实例---pthread_join函数详解1.doc_第1页
多线程编程实例---pthread_join函数详解1.doc_第2页
多线程编程实例---pthread_join函数详解1.doc_第3页
多线程编程实例---pthread_join函数详解1.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多线程编程实例-pthread_join函数详解1单处理器上的linux多线程,是通过分时操作完成的;此时互斥锁的作用,只有在时间足够的情况下才能体现出来,即有时线程内需要延时;否则只有第一个线程不断解锁和获锁,别的线程在第一个线程执行完前无法获得互斥锁。三 pthread_join pthread_exit函数pthread_join用来等待一个线程的结束。函数原型为:extern int pthread_join _P (pthread_t _th, void *_thread_return); 第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将 一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它的 线程也就结束了;另一种方式是通过函数pthread_exit来实现。它的函数原型为:extern void pthread_exit _P (void *_retval) _attribute_ (_noreturn_); 唯一的参数是函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给 thread_return。最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线 程则返回错误代码ESRCH。在这一节里,我们编写了一个最简单的线程,并掌握了最常用的三个函数pthread_create,pthread_join和pthread_exit。下面,我们来了解线程的一些常用属性以及如何设置这些属性。 /源程序:/*thread_example.c : c multiple thread programming in linux */#include#include#include#include#define MAX1 10#define MAX2 30pthread_t thread2;pthread_mutex_t mut;int number=0, i;void *thread1() printf (thread1 : Im thread 1n); for (i = 0; i MAX1; i+) printf(thread1 : number = %d i=%dn,number,i); pthread_mutex_lock(&mut); number+; pthread_mutex_unlock(&mut); sleep(2); printf(thread1 :Is main function waiting for me acomplishing task? n); pthread_exit(NULL);void *thread2() printf(thread2 : Im thread 2n); for (i = 0; i MAX2; i+) printf(thread2 : number = %d i=%dn,number,i); pthread_mutex_lock(&mut); number+; pthread_mutex_unlock(&mut); sleep(3); printf(thread2 :Is main function waiting for me to acomplish task ?n); pthread_exit(NULL);void thread_create(void) int temp; memset(&thread, 0, sizeof(thread); /comment1 /*创建线程*/ if(temp = pthread_create(&thread0, NULL, thread1, NULL) != 0) /comment2 printf(线程1创建失败!n); else printf(Thread 1 is establishedn); if(temp = pthread_create(&thread1, NULL, thread2, NULL) != 0) /comment3 printf(线程2创建失败); else printf(Thread 2 is establishedn);void thread_wait(void) /*等待线程结束*/ if(thread0 !=0) /comment4 pthread_join(thread0,NULL); printf(Thread 1 is over n); if(thread1 !=0) /comment5 pthread_join(thread1,NULL); printf(Thread 2 is overn); int main() /*用默认属性初始化互斥锁*/ pthread_mutex_init(&mut,NULL); printf(I am the main funtion,and I am establishing threads. Ha-han); thread_create(); printf(I am the main funtion,and I am waiting for thread to accomplish task. Ha-han); thread_wait(); return 0;/执行情况1(linux终端):rootlocalhost root# gcc -o joint joint.c -lpthreadrootlocalhost root# ./jointI am the main funtion,and I am establishing threads. Ha-hathread1 : Im thread 1thread1 : number = 0 i=0Thread 1 is establishedthread2 : Im thread 2thread2 : number = 1 i=0Thread 2 is establishedI am the main funtion,and I am waiting for thread to accomplish task. Ha-hathread1 : number = 2 i=1thread2 : number = 3 i=2thread1 : number = 4 i=3thread2 : number = 5 i=4thread1 : number = 6 i=5thread1 : number = 7 i=6thread2 : number = 8 i=7thread1 : number = 9 i=8thread2 : number = 10 i=9thread1 :Is main function waiting for me acomplishing task?Thread 1 is overthread2 : number = 11 i=11thread2 : number = 12 i=12thread2 : number = 13 i=13thread2 : number = 14 i=14thread2 : number = 15 i=15thread2 : number = 16 i=16thread2 : number = 17 i=17thread2 : number = 18 i=18thread2 : number = 19 i=19thread2 : number = 20 i=20thread2 : number = 21 i=21thread2 : number = 22 i=22thread2 : number = 23 i=23thread2 : number = 24 i=24thread2 : number = 25 i=25thre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论