和进程相比,线程更节俭。进程必须分配独立的地址空间,建立众多的数据表维护其代码段,堆栈段和数据段。
统一进程下的线程共享数据空间。
遵循POSIX线程接口,称Pthread.需要使用头文件Pthread.h和库文件Pthread.a.
创建线程
Int pthread_create(pthread_t *tidp,const pthread_attr_t * attr, void *(*start_rtn)(void),void *arg)
Tidp 线程ID
Attr 线程属性
Start_rtn 线程要执行的函数
Arg Start_rtn的参数
Pthread的库不是linux的系统库,编译的时候要加上 -lpthread
Gcc filename -lpthread
Void *thread1()
{
}
Void *thread2()
{
}
Main()
{从函数获取ID
Ret=pthread_create(&id1,NULL,(void*)thread1.NULL);
If (Ret)
{
Printf();
}
}
线程终止
Pthread_exit();
线程等待
Int pthread_join(pthread_t tid,void **rval_ptr);
Tid等待退出的线程ID
rval_ptr 线程退出的返回值的指针
线程标识
Pthread_t pthread_sef(void);
Pthread_cleanup_push的调用点到Pthread_cleanup_pop的之间程序段中的终止动作(包括调用Pthread_exit()和异常终止)都将执行Pthread_cleanup_push()所指定的清理函数。
Pthread_cleanup_push(void (*rtn)(void *),void *arg);
Rtn清除函数
Arg清除函数的参数
Pthread_cleanup_pop(int execute);
Execute 非0:执行 0:不执行函数
这里测试0好像也执行了