posts - 2, comments - 0, trackbacks - 0, articles - 0

线程创建,等待,退出

Posted on 2010-01-25 22:15 LibraLiang 阅读(1050) 评论(0)  编辑 收藏 引用 所属分类: UNIX线程
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>
 4void* th(void *data);
 5int 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}

21void* 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>
 5void* th(void *data);
 6int 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}

23void* 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


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理