线程资源回收:
函数pthread_join();
功能:等待线程结束
参数1:线程的tid号
参数2:用来保存退出状态值所在的空间地址
返回值:成功返回0,失败返回错误码
注:线程退出时,可以带出退出状态值,传参传的是退出状态值对应的空间地址
方式2:在线程执行函数中return(返回一个地址)
方式3:函数pthread_cancel();
功能:发送取消请求
参数:表示发送的线程的tid号
返回值:成功为0,失败返回错误码
方式4:任何一个线程调用了exit()函数,或者主函数return结束进程,所有线程都会结束
系统自动回收:子线程运行了很久才结束-------设置分离属性
函数:pthread_detach()
参数:要设置分离的线程的tid号
功能:分离线程 返回值:成功返回0,失败返回错误码
--------------------------------------------------------------------------------------------------------------------------------
线程间的资源竞争:
共享资源------临界资源
临界区:访问共享资源的一段代码
解决线程间干扰访问共享资源问题,制造出了一种机制:
互斥锁:
互斥:排他性-------要么不访问,要访问就是一次完整操作(原子操作)
锁:软件层面上的锁
锁的操作机制:
框架:
定义互斥锁-----初始化锁-----加锁-----解锁-----销毁
定义:pthread_mutex_t(互斥锁类型) mutex(互斥锁变量,内核对象)
初始化:pthread_mutex_init();
参数1:&mutex 参数2:NULL
加锁:pthread_mutex_lock();
参数:&mutex 要加锁加在访问临界资源的地方
解锁:pthread_mutex_unlock();
参数:&mutex 临界资源用完之后就解锁
销毁:pthread_mutex_destroy();
参数:&mutex 主函数最后销毁用完的锁
---------------------------------------------------------------------------------------------------------------------------------总结:锁就是一种线程间都同步机制
互斥锁:保证线程对于共享资源的排他性访问,保证每个线程访问时的原子性操作