一.线程创建
int pthraed_create(pthread_t *thread,const pthread_attr_t *attr,void*(*start_routine)(void*),void *arg);
thread:用于获取线程id--线程地址空间在整个虚拟地址空间中的首地址
attr:设置线程属性,通常置NULL
start_routine:线程的入口函数
arg:传递给线程函数的参数
返回值:0--成功 !0--创建失败--errno
线程中id的讨论:
1.tid:线程地址空间首地址
2.pcb->pid:轻量级进程id
3.pcb->tgid:进程(线程组)id,默认等于首线程id
二.线程终止
return//不能在main函数中return(退出的是进程-导致所有线程退出)
void pthread_exit(void *retval);//退出线程自身,谁调用谁退出
//retval:线程的退出返回值
int pthread_cancel(pthread_t thread);//取消其他线程;让其他线程退出
//thread:要取消的线程id
线程退出之后,默认不会释放资源,将退出结果保存在线程独有的地址空间中,因此会造成资源泄露
主线程退出之后,其他线程依然可以正常运行
三.线程等待
int pthraed_join(pthread_t thread,void **retval);
功能:阻塞等待指定线程退出,通过retval获取返回值
线程等待:等待线程退出,获取退出线程的返回结果,释放此退出线程资源
线程被创建出来,都有一个默认的joinable属性,处于joinable属性的线程退出后,不会自动释放资源,需要被其他线程等待,才能释放资源,如果不等待,则会造成资源泄露
四.线程分离
pthread_detach(pthread_t tid)
线程分离:将线程的joinable属性改为detach属性
线程若处于detach状态,退出将自动回收资源,且不需要被等待
适用场景:对线程返回值不关心