这一节我们来学习一下线程,首先来看一下线程创建函数
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void (start_routine) (void ), void arg);
第一个参数thread:这个参数保存的是创建了的线程的ID号
第二个参数attr:这个参数是线程的属性,一般设为NULL,使用默认的属性
第三个参数voidarg:这个是线程要处理的函数。
第四个参数voidarg:这个是要传给函数的参数。
下面来看一下线程回收函数:
int pthread_join(pthread_t thread, void **retval)
第一个参数是要回收的线程号,第二个参数保存线程返回的值。
int pthread_detach(pthread_t thread)
这个函数和pthread_join互斥使用,这个是设置线程为分离态,运行结束后系统回收。
线程退出要调用pthread_exit()函数,任何线程调用_exit()函数都会使主线程退出
下面用一个例子来演示一下这个函数的使用方法
#include<pthread.h>
#include<string.h>
#include<stdio.h>
//线程1处理函数
void *pth1()
{
printf("I am pthread 1\n");
pthread_exit((void*)0);
}
//线程2处理函数
void *pth2(void*arg)
{
pthread_detach((pthread_t)arg);//把线程设为分离态,就不用调用pthread_join()
printf("I am pthread 2\n");
pthread_exit((void*)1);
}
int main()
{
pthread_t pid[2];
pthread_create(&pid[0],NULL,pth1,NULL);//创建线程
pthread_create(&pid[1],NULL,pth2,(void*)pid[1]);
pthread_join(pid[0],NULL);//阻塞函数,等待线程退出
return 0;
}
编译时要加上-lpthread来调用系统的库
运行结果为: