条件变量(Condition Variable)
- 条件变量的作用:
虽然互斥锁实现了线程之间的互斥,但是互斥锁也有不足之处,它只能表示两种状态:上锁和非上锁。但是假如有线程A拿着锁进入临界区,并在临界区休眠了。而此时正在等待该锁的线程就会不断轮询,查看锁是否已经被释放。当线程A释放锁后,所有在该锁上阻塞的线程都会变成可运行状态,第一个变成可运行状态的线程会先获得锁,其他线程会继续等待直到变为可用。
引入条件变量一个就是为了避免为了查看条件是否成立而不断轮询的情况,这样也提高了效率;另一个就是为了防止竞争,条件变量用来阻塞一个线程,当条件不满足时,线程往往会解开互斥锁并等待条件发生变化,一旦有某个线程改变了条件变量,它会通知该条件变量下的一个或多个正在被该条件变量阻塞的线程,这些线程会重新上锁并检测条件是否成立。
总结:互斥锁实现的是线程之间的互斥,条件变量实现的是线程之间的同步。
对条件变量的理解:
1、条件变量与互斥锁一样,都是一种数据;
2、条件变量的作用是描述当前资源的状态,即当前资源是否就绪。
3、条件变量是在多线程程序中用来实现“等待->唤醒”逻辑的常用方法。条件变量的接口函数:
1.初始化: