【发布时间】:2011-06-12 03:33:27
【问题描述】:
我想知道在 pthread 中使用条件变量而不是互斥锁有什么性能优势。
我发现:“没有条件变量,程序员需要让线程不断轮询(可能在关键部分),以检查是否满足条件。这可能非常消耗资源,因为线程会连续忙于这项活动。条件变量是一种无需轮询即可实现相同目标的方法。 (https://computing.llnl.gov/tutorials/pthreads)
但似乎互斥锁调用也是阻塞的(与自旋锁不同)。因此,如果一个线程 (T1) 因为其他线程 (T2) 拥有锁而未能获得锁,则 T1 被 OS 置于睡眠状态,并且只有在 T2 释放锁并且 OS 将锁交给 T1 时才会唤醒。线程 T1 并没有真正轮询以获得锁。从这个描述来看,使用条件变量似乎没有性能优势。在任何一种情况下,都不涉及轮询。无论如何,操作系统提供了条件变量范式可以提供的好处。
你能解释一下实际发生的事情吗?
【问题讨论】:
标签: multithreading variables pthreads mutex conditional-statements