线程退出
方式一:pthread_exit
方式二:从·线程执行函数中return (return &a)
方式三:pthread_cancel
方式四:任何一个线程调用了exit或主线程return都会造成进程结束
线程回收
1.pthread_join //需要自己回收 ---线程的属性 (可结合性) --- 一般是子线程 在较短时间内运行完
2.pthread_detach //可分离属性 ---子线程运行很久才结束 --- 设置分离属性
函数:
pthread_detach();
int pthread_detach(pthread_t thread);
功能:
分离线程
参数:
thread 要分离的线程的tid
返回值:
成功 0
失败 错误码
线程间的资源竞争:
共享资源: 临界资源
临界区 : 访问共享资源(临界资源)那段代码
机制:互斥锁
框架:
定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁
定义互斥锁:
pthread_mutex_t mutex;
互斥锁类型 互斥锁变量 内核对象
初始化锁
pthread_mutex_init(); //初始化一把锁
加锁 //加锁 加在 要访问临界资源的地方
pthread_mutex_lock(); //上锁
解锁
pthread_mutex_unlock(); //解锁 临界资源访问之后就解开
销毁
pthread_mutex_destroy();//销毁一把锁 初始化锁
pthread_mutex_init(); //初始化一把锁
死锁产生的必要条件:
1、互斥条件
2、不剥夺条件
3、请求和保持条件
4、循环等待条件
线程间的顺序问题:
//同步操作
强调的是线程的 顺序问题
信号量 //交通信号灯
//实现一种可以让线程间有序访问临界资源的方式
信号量 --- 可以顺序操作的一把锁