线程回收与线程间通信
.线程回收:pthread_join();
int pthread_join(pthread_t thread, void **retval);
功能:阻塞等待回收线程资源空间
参数:
thread:要回收的线程ID
retval:用来保存线程退出时传递的参数
NULL:不接收传递的参数
返回值:
成功:0
失败:-1
线程回收策略:
1.分离属性的线程:不需要回收(没有空闲的线程可帮忙回收)
2.非分离属性的线程:pthread_join()阻塞回收
线程属性
1.分离属性: 不需要被其他线程回收的线程称为分离属性得到线
程,将来会被操作系统所回收。
int pthread_detach(pthread_t thread);
功能:将线程设置成分离属性的线程
2.非分离属性:可以被其他线程回收或者结束的线程,称为非分离
属性的线程。(默认属性:非分离属性)
线程间通信:全局变量,全局队列,共享内存区域。
全局变量通信:
临界资源:多个线程可以同时访问的资源称为临界资源:比
如,全局变量共享内存区域等。
多个线程在访问临界资源时,存在资源竞争。
如何解决资源竞争问题:
- 互斥机制:多个线程访问临界资源时,具有排他问的机制
(一次只允许一个线程对该临界资源进行访问)。
互斥锁--》解决资源竞争问题。
实现步骤:
1.创建互斥锁 pthread_mutex_t
2.初始化互斥锁 pthread_mutex_init
3.加锁 int pthread_mitex_lock(pthreadmutex_t*mutex)
4.解锁 int pthread_mitex_unlock(pthreadmutex_t*mutex)
5.销毁锁 int pthread_mutex_destroy(pthread_mutex_t*mutex