两个进程都想获得对方的锁,造成死锁 。
条件变量概念利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使“条件成立”(给出条件成立信号) 。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起 。
同步: 在保证数据安全的前提下 , 让线程能够按照某种特定的顺序访问临界资源 , 从而避免饥饿问题,叫做同步
为什么存在线程同步?
线程同步使得每个线程都能够访问临界资源,多个线程协同高效完成某些任务 。
条件变量如何与互斥锁结合使用?
条件变量是包含一个等待队列的 。多个线程可以去竞争一把锁 , 没有得到锁资源的线程会在锁上继续挂起等待,当拥有锁的线程条件变量满足时 , 会先释放锁资源,然后进入到条件变量的等待队列去等待(等待其他线程唤醒),这样其他线程就可以获得锁资源,如果此时唤醒的条件变量满足,该线程可以去唤醒等待队列中的第一个线程,自己释放锁资源 , 然后让第一个线程重新拥有锁资源,依次如此 , 多个线程就是顺序地执行工作 。这样就可以实现线程同步的操作 。
与互斥锁不同的是,条件变量是用来等待而不是用来上锁的,条件变量本身就不是锁!
条件变量用来自动阻塞一个线程,直到某种特殊情况发生为止,通常和互斥锁一起使用 。
条件变量的两个动作:
- 条件不满 , 阻塞线程
- 条件满足,通知阻塞的线程开始工作
条件变量的接口条件变量是一个类型为pthread_cond_t的条件变量,课通过定义变量的方式来定义一个条件变量
- 条件变量初始化
- 条件变量的销毁
- 等待条件变量满足
条件变量是实现线程同步的一种手段,如果一个线程进入等待队列还不释放锁资源,这样其他线程也不能够得到锁资源,这样唤醒线程的条件变量永远不可能满足,那么这个线程也将一直等待下去 。所以一个线程进入等待队列需要释放自己手中的锁资源来实现真正地同步
- 唤醒条件变量
推荐阅读
- 华为watch3可以使用微信吗_华为watch3有微信吗
- Python 多重继承时metaclass conflict问题解决与原理探究
- 神仙记事录第十二章怎么过
- 嘉峪关到张掖-嘉峪关到张掖多少公里
- 多玩LOL盒子战绩查询 英雄联盟战绩查询在线查询系统
- dnf公会勋章怎么获得(dnf公会传说勋章多久能获得)
- 【多服务场景化解决方案】AR虚拟技术助力智能家装
- 一 Linux--多线程
- pta第二次博客
- 1斤等于多少磅 一斤等于多少磅