线程创建,等待,退出

1.线程创建函数    

int pthread_create(pthread_t * thread,const pthread_attr_t * attr,void *(*start_routine)(void*), void * arg);

返回:

         成功返回0,失败返回错误号,错误号说明如下:

         EAGAIN 创建线程的系统资源不足,或者超过系统限制的最大线程数PTHREAD_THREADS_MAX

         EINVAL 创建线程的属性非法,就是第二个参数设置不正确。

         EPERM 调用者没有足够的权限。

参数说明:

         pthread_t * thread:线程ID

         pthread_attr_t * attr:线程属性,如果是NULL,则采用缺省属性。

         void *(*start_routine)(void*)线程执行代码

         void * arg传递给线程执行代码过程的参数


2.线程等待函数    

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

返回:成功返回0,失败返回非0的错误号。错误号说明如下:

         EINVAL 指定的线程ID不是合法的ID,就是不可JOIN的线程。

         ESRCH 指定的线程ID不存在。

         EDEADLK指定的线程被死锁。

参数说明:

         thread:就是要JOIN的线程ID。

         value_ptr:就是线程函数的返回值。

3.线程退出函数

void pthread_join(void* rtv);

参数说明:

         rtv :就是线程函数的返回值。相当于线程函数中的 return 返回的值,被传递给 pthread_join 的第二个参数

线程创建例子
 1 #include  < stdio.h >
 2 #include  < pthread.h >
 3 #include  < stdlib.h >
 4 void *  th( void   * data);
 5 int  main()
 6 {
 7    pthread_t  th1;
 8    char d[]="Hello我是参数!";
 9    int re=pthread_create(&th1,NULL,(void*)th,&d);
10    if(re)
11    {
12        printf("创建线程失败\n");
13        exit(1);
14    }

15    char *rd;
16    pthread_join(th1,(void**)&rd);
17    printf("线程返回的数据%s\n",rd);
18    printf("主程序退出\n");
19    return 0;
20}

21 void *  th( void   * data)
22 {
23    int i=0;
24    for(;i<10;i++)
25    {
26        printf("\tThread -1:%s\n",data);
27        sleep(1);
28    }

29    return data;
30}

31

线程退出例子
 1 #include  < stdio.h >
 2 #include  < pthread.h >
 3 #include  < stdlib.h >
 4 #include  < sys / types.h >
 5 void *  th( void   * data);
 6 int  main()
 7 {
 8    pthread_t  th1;
 9    char d[]="Hello我是参数!";
10    int re=pthread_create(&th1,NULL,(void*)th,&d);
11    if(re)
12    {
13        printf("创建线程失败\n");
14        exit(1);
15    }

16    char *rd;
17    pthread_join(th1,(void**)&rd);
18    printf("线程返回的数据%s\n",rd);
19    printf("主程序退出\n");
20    /**//*主进程结束,子线程也结束并自动释放资源。*/
21    return 0;
22}

23 void *  th( void   * data)
24 {    
25    int i=0;
26    for(;;i++)
27    {        
28        printf("\tThread -1:%d\n",i);
29        if(i==5)
30        {                
31            pthread_exit("hello");
32        }

33        
34    }

35    return data;
36}

37

你可能感兴趣的:(线程创建,等待,退出)