加强学院网站的建设与管理,小网站开发成本,WordPress静态写入内存,wordpress加载特效插件为何要线程同步
在线程互斥中外面解决了多线程访问共享资源所会造成的问题。
这篇文章主要是解决当多线程互斥后引发的新的问题#xff1a;线程饥饿的问题。
什么是线程饥饿#xff1f;互斥导致了多线程对临界区访问只能改变为串行#xff0c;这样访问临界资源的代码只能…为何要线程同步
在线程互斥中外面解决了多线程访问共享资源所会造成的问题。
这篇文章主要是解决当多线程互斥后引发的新的问题线程饥饿的问题。
什么是线程饥饿互斥导致了多线程对临界区访问只能改变为串行这样访问临界资源的代码只能一个一个线程访问如果不加以限制就会导致无序的争抢资源并且当资源还未准备就绪的情况下也会不停的加锁解锁浪费CPU资源。 第一个问题无序存在在循环中有可能会导致部分优先级低的线程无法访问到锁从而无法访问到临界资源我们称之为线程饥饿。
第二个问题临界资源未就绪只有互斥的情况下线程只能循环加锁解锁访问无法等待就绪情况。
条件变量
线程同步的一种方法。
先说接口
变量类型
pthread_cond_t cond;
条件变量类型是线程库中的自定义类型名。
初始化条件变量
int pthread_cond_init (pthread_cond_t * __cond,const pthread_condattr_t * __cond_attr)
初始化条件变量第二个属性设为nullptr
析构条件变量
int pthread_cond_destroy (pthread_cond_t *__cond)
当不再使用条件变量请析构
等待条件满足
int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t* mutex);
发送条件
参数 cond要在这个条件变量上等待 mutex互斥量条件变量也是共享数据需要锁的保护。
条件变量其实类型队列的存入与取出
//唤醒等待
int pthread_cond_broadcast(pthread_cond_t *cond);//唤醒全部
int pthread_cond_signal(pthread_cond_t *cond);//唤醒一个
唤醒队列中等待的线程。
画图解释流程 当临界资源未就绪下