1.互斥锁是来保护共享资源flag的,因此应该研究为什么使用条件变量时一定需要flag
2.条件变量的作用
在保持线程间的先后顺序时,需要频繁进入临界区,频繁的加锁解锁
while(1){
lock();
if(flag){
break;
}
unlock();
}
而条件变量就是为了解决这种多次加锁解锁造成的资源浪费而产生的
刚开始可能会想,直接wait和signal就能发挥作用,例如需要B在A前执行
threadA(){
wait();
dosomething();
}
threadB(){
dosomething();
signal();
}
但是如果是这种情况,直接就可以通过lock和unlock解决,根本不需要使用条件变量,根本就不存在上述的频繁上锁解锁浪费资源的问题
所以搞清楚了条件变量要解决什么样的问题,就知道为什么一定要使用flag,而为了保护flag自然需要使用到互斥锁