【C】多线程编程笔记

1. pthread_create(pthread类型指针变量 ,NULL ,函数 ,函数参数[多个参数用结构体传])

2. pthread_join(pthread类型指针变量, 返回一般为null)

  pthread_join的作用:

     pthread_join()函数,以阻塞的方式等待thread指定的线程结束。

      如果不用这个函数,直接create后,进程也会运行,但是主线程不会等待这些子线程是否已经运行结束,而继续向下运行,很快主线程就结束了,而子线程还未运行完,被迫结束。

     加入pthread_join后,主线程会一直等待直到等待的线程结束自己才继续向下运行,使创建的线程有机会执行。

 1 #include <stdio.h>  
 2 #include <stdlib.h>
 3 #include <pthread.h>  
 4 #include <unistd.h>  
 5 #include <signal.h>
 6 
 7 typedef struct params{ 
 8         char * value;
 9         int num;
10 }params;
11 void thread_mess(params *);
12 
13 void main(void)
14 {
15 
16         int err;
17         pthread_t t1,t2;
18         void *tret;
19         
20         params p_1={"threadd_1",1};     
21         params p_2={"threadd_2",2};     
22 
23         err = pthread_create(&t1,NULL,(void *)thread_mess,&p_1);
24         if(err != 0)
25         {       
26                 puts("error 1");
27                 exit(1);
28         }       
29         err = pthread_create(&t2,NULL,(void *)thread_mess,&p_2);
30         if(err != 0)
31         {       
32                 puts("error 2");
33                 exit(1);
34         }       
35         
36         //pthread_join第二个参数是接受的是pthread_exit返回的数据
37         err = pthread_join(t1,&tret);
38         printf("t1 join %d\n",(int)tret);
39         err = pthread_join(t2,&tret);
40         printf("t2 join %d\n",(int)tret);
41 }
42 
43 void thread_mess(params * array)
44 {
45         printf("%s\n",array->value);
46         pthread_exit((void *)array->num);
47 
48 }    

 

posted @ 2015-04-08 10:57  悲惨的大爷  阅读(199)  评论(0编辑  收藏  举报