我想知道使用条件变量而不是pthread中互斥锁的性能优势。使用条件变量优于互斥锁
我发现的是:“没有条件变量,程序员需要有线程不断轮询(可能在临界段),以检查是否满足条件,这是非常消耗资源的,因为线程会。在这项活动中不断忙碌,条件变量是一种不用投票就能达到同样目标的方法。“ (https://computing.llnl.gov/tutorials/pthreads)
但似乎互斥锁调用阻塞(与自旋锁不同)。因此,如果一个线程(T1)由于某个其他线程(T2)具有该锁而未能获得锁,则T1被操作系统置于休眠状态,并且仅当T2释放该锁并且操作系统给T1锁时才被唤醒。线程T1并不真正轮询来获取锁。从这个描述看来,使用条件变量似乎没有性能优势。无论哪种情况,都不涉及投票。无论如何,操作系统提供了条件变量范例可以提供的好处。
你能解释一下究竟发生了什么。
对。一个互斥锁只允许你等待,直到锁定可用;一个条件变量允许您等待某个应用程序定义的条件发生变化。 – caf 2011-01-20 05:09:51
谢谢你的例子!清理的东西:) – Abhi 2011-01-20 18:21:59
我不明白为什么你不能放下条件变量,只是在一些简单的情况下使用互斥。获取“工作可用”条件下的互斥锁。然后让生产者线程获得互斥量,并且工作线程尝试获取它。当工作可用时,生产者解锁互斥体。然后操作系统会通过获取互斥锁来唤醒工作人员,然后工作人员将运行到完成状态,然后尝试重新获取它自己的互斥锁,然后进入睡眠状态(死锁本身)。一旦生产者有更多的工作,它可以解锁互斥。可能需要小心检查互斥锁是否先被锁定。 – Eloff 2013-04-06 20:34:14