linux线程同步中的条件变量

当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。
例如一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列中。这种情况就需要用到条件变量。
同步概念与竞态条件:
同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步。

cond :要初始化的条件变量
attr : NULL
销毁条件变量:
int pthread_cond_destroy(pthread_cond_t *cond)
等待条件变量:
int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);
参数:
cond :要在这个条件变量上等待
mutex :互斥量
注意:条件变量带锁的意义是:当我们将某个线程放到条件变量中(可能队列等顺序容器)去等待的时候,条件变量为了防止死锁问题会自动将我们等待的线程的锁给释放掉,也就是说不然某个线程在等待的时候持有锁。
当然也有唤醒条件变量的接口:
int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《linux线程同步中的条件变量》
文章链接:https://zhuji.vsping.com/5078.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。