Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71101
  • 博文数量: 16
  • 博客积分: 392
  • 博客等级: 一等列兵
  • 技术积分: 201
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-24 09:21
文章分类

全部博文(16)

文章存档

2012年(16)

我的朋友

分类: LINUX

2012-04-24 20:49:20


代码很简单,注意主线程和创建的现成之间的参数传递以及函数的参数的传递。

  1. pthread.c  
  2. #include <stdio.h> 
  3. #include <unistd.h> 
  4. #include <stdlib.h> 
  5. #include <pthread.h> 
  6. #include <string.h> 
  7. struct argument  
  8. {  
  9.     int num;  
  10.     char string[30];  
  11. };  
  12. int main()  
  13. {  
  14.     int i,ret;  
  15.     void *thread1_func(void *);  
  16.     void *thread2_func(void *);  
  17.     void *thread_return1,*thread_return2;/*用来接收两个线程退出后的返回值*/  
  18.     pthread_t thread1,thread2;  
  19.     struct argument arg1,arg2;  
  20.     arg1.num=1949;  
  21.     strcpy(arg1.string,"中华人民共和国成立");  
  22.     arg2.num=2009;  
  23.     strcpy(arg2.string,"建国六十周年");  
  24.     pthread_create(&thread1,NULL,thread1_func,(void *)&arg1);  
  25.     pthread_create(&thread2,NULL,thread2_func,(void *)&arg2);  
  26.     for(i=0;i<=2;i++)  
  27.     {  
  28.         printf("我是最初的进程!\n");  
  29.         sleep(2);  
  30.     }  
  31.     ret=pthread_join(thread1,&thread_return1);/*等待第一个线程退出,并接收它的返回值*/  
  32.     if(ret!=0)  
  33.         printf("调用pthread_join获取线程1返回值出现错误!\n");  
  34.     else  
  35.         printf("pthread_join调用成功!线程1退出后带回的值是%d\n",(int)thread_return1);  
  36.     ret=pthread_join(thread2,&thread_return2);/*等待第二个线程退出,并接收它的返回值*/  
  37.     if(ret!=0)  
  38.         printf("调用pthread_join获取线程2返回值出现错误!\n");  
  39.     else  
  40.         printf("pthread_join调用成功!线程2退出后带回的值是%d\n",(int)thread_return2);  
  41.     return 0;  
  42. }  
  43. void *thread1_func(void *arg)  
  44. {  
  45.     int i;  
  46.     struct argument *arg_thread1;/*这里定义了一个指向argument类型结构体的指针arg_thread1,用它来接收传过来的参数的地址*/  
  47.     arg_thread1=(struct argument *)arg;  
  48.     for(i=0;i<=3;i++)  
  49.     {  
  50.         printf("我来自线程1,传递给我的参数是%d,%s。\n",(*arg_thread1).num,(*arg_thread1).string);  
  51.         sleep(2);  
  52.     }  
  53.     return (void *)123;  
  54. }  
  55. void *thread2_func(void *arg)  
  56. {  
  57.     int i;  
  58.     struct argument arg_thread2;/*这里定义了一个argument类型的结构体arg_thread2,用来接收传过来的指针参数指向的值。
  59. 这种方法和thread1_func函数中的方法都是可行的*/  
  60.     arg_thread2=*(struct argument *)arg;      
  61.     for(i=0;i<=3;i++)  
  62.     {  
  63.         printf("我来自线程2,传递给我的参数是%d,%s。\n",arg_thread2.num,arg_thread2.string);  
  64.         sleep(2);  
  65.     }  
  66.     return (void *)456;  
http://blog.csdn.net/lzx_bupt/article/details/6915117 一共六讲很详细的,带例子
阅读(1711) | 评论(0) | 转发(1) |
0

上一篇:Linux 多线程讲解

下一篇:linux 线程池讲解

给主人留下些什么吧!~~