为什么 a 的wait()
方法boost::conditiona_variable
需要一个boost::unique_lock
对象作为参数而不是简单的boost::mutex
?
实际上,unique_lock 的用途并不完全清楚。为什么要在我的 周围创建另一个包装器对象boost::mutex
,对性能有什么影响?
例如,假设我有两个线程,thread1
并且thread2
:
上thread1
void process() {
while(true){
while (objectToProcess == NULL) {
boost::unique_lock lock(mutex);
waitingVariable.wait(lock);
}
doSomething(objToProcess);
objToProcess = NULL;
waitingVariable.notify();
}
}
上thread2
:
void feedProcessor() {
while(true) {
while (objectToProcess != NULL) {
boost::unique_lock lock(mutex);
waitingVariable.wait(lock);
}
objToProcess = createNewObjectToProcess();
waitingVariable.notify();
}
}
unique_lock
在这种情况下,我发现每次需要调用wait()
条件变量的方法时都创建新对象是很浪费的。您能否告诉我这些对象的目的以及它们是否会引入大量开销?
谢谢!
(我看到我的问题与这个问题重叠,但我更关心的是开销而不是目的......)