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>
#include <stdio.h>
 2 #include <pthread.h>
#include <pthread.h>
 3 #include <stdlib.h>
#include <stdlib.h>
 4 void* th(void *data);
void* th(void *data);
 5 int main()
int main()
 6

 {
{
 7 pthread_t  th1;
    pthread_t  th1;
 8 char d[]="Hello我是参数!";
    char d[]="Hello我是参数!";
 9 int re=pthread_create(&th1,NULL,(void*)th,&d);
    int re=pthread_create(&th1,NULL,(void*)th,&d);
10 if(re)
    if(re)
11
 
     {
{
12 printf("创建线程失败\n");
        printf("创建线程失败\n");
13 exit(1);
        exit(1);
14 }
    }
15 char *rd;
    char *rd;
16 pthread_join(th1,(void**)&rd);
    pthread_join(th1,(void**)&rd);
17 printf("线程返回的数据%s\n",rd);
    printf("线程返回的数据%s\n",rd);
18 printf("主程序退出\n");
    printf("主程序退出\n");
19 return 0;
    return 0;
20 }
}
21 void* th(void *data)
void* th(void *data)
22

 {
{
23 int i=0;
    int i=0;
24 for(;i<10;i++)
    for(;i<10;i++)
25
 
     {
{
26 printf("\tThread -1:%s\n",data);
        printf("\tThread -1:%s\n",data);
27 sleep(1);
        sleep(1);
28 }
    }
29 return data;
    return data;
30 }
}
31
 
线程退出例子
 1 #include <stdio.h>
#include <stdio.h>
 2 #include <pthread.h>
#include <pthread.h>
 3 #include <stdlib.h>
#include <stdlib.h>
 4 #include <sys/types.h>
#include <sys/types.h>
 5 void* th(void *data);
void* th(void *data);
 6 int main()
int main()
 7

 {
{
 8 pthread_t  th1;
    pthread_t  th1;
 9 char d[]="Hello我是参数!";
    char d[]="Hello我是参数!";
10 int re=pthread_create(&th1,NULL,(void*)th,&d);
    int re=pthread_create(&th1,NULL,(void*)th,&d);
11 if(re)
    if(re)
12
 
     {
{
13 printf("创建线程失败\n");
        printf("创建线程失败\n");
14 exit(1);
        exit(1);
15 }
    }
16 char *rd;
    char *rd;
17 pthread_join(th1,(void**)&rd);
    pthread_join(th1,(void**)&rd);
18 printf("线程返回的数据%s\n",rd);
    printf("线程返回的数据%s\n",rd);
19 printf("主程序退出\n");
    printf("主程序退出\n");
20
 /**//*主进程结束,子线程也结束并自动释放资源。*/
    /**//*主进程结束,子线程也结束并自动释放资源。*/
21 return 0;
    return 0;
22 }
}
23 void* th(void *data)
void* th(void *data)
24

 {
{    
25 int i=0;
    int i=0;
26 for(;;i++)
    for(;;i++)
27
 
     {
{        
28 printf("\tThread -1:%d\n",i);
        printf("\tThread -1:%d\n",i);
29 if(i==5)
        if(i==5)
30
 
         {
{                
31 pthread_exit("hello");
            pthread_exit("hello");
32 }
        }
33 
        
34 }
    }
35 return data;
    return data;
36 }
}
37