|
1
14
这两种结构完全不同。互斥体旨在提供对某种资源的序列化访问。条件变量意味着允许一个线程通知另一个线程某个事件已经发生。 |
|
|
2
13
在这个线程中,您将处于一个紧密的循环中,消耗大量cpu,并导致大量锁争用。如果锁定/解锁互斥锁足够便宜,那么您可能会遇到其他线程甚至没有机会获得锁的情况(尽管现实世界中的互斥锁通常区分拥有线程和拥有锁,并且具有公平性的概念,因此这在现实中不太可能发生)。 你可以通过睡懒觉来减少忙碌的等待,
但是睡多久才是好觉呢?你基本上只是在猜测。运行时也不能告诉你为什么要睡觉,或者你在等什么。条件变量使运行时至少在一定程度上了解当前同一事件中哪些线程感兴趣。 |
|
|
3
3
简单的答案是,您可能希望从条件变量中唤醒多个线程,但互斥体只允许一个线程执行受保护的块。 |
|
|
Iceman · 等待条件变量时的信号计数器 13 年前 |