2010-10-09 93 views
3

我在下面的代碼中遇到錯誤。提升condition_variable參數錯誤

recursive_mutex m_RecurMutex; 
condition_variable cond; 
unique_lock<recursive_mutex> lock(m_RecurMutex); 
cond.wait(lock); // Error Here. 

造成此錯誤的原因是什麼?

+1

你會得到什麼錯誤? – SCFrench 2010-10-11 00:13:17

回答

2

我認爲錯誤是

mutex.cc: In function ‘int main()’: 
mutex.cc:9: error: no matching function for call to ‘boost::condition_variable::wait(boost::unique_lock<boost::recursive_mutex>&)’ 
/opt/local/include/boost/thread/pthread/condition_variable.hpp:17: note: candidates are: void boost::condition_variable::wait(boost::unique_lock<boost::mutex>&) 
i 

如果沒有,請大家指正。 documentation顯示boost::condition_variable::lock需要boost::unique_lock<boost::mutex>作爲參數,而不是boost::unique_lock<boost::recursive_mutex>,如您的示例中所示。

+0

我認爲boost :: recursive_mutex是boost :: mutex的一個特例。 – peterwkc 2010-10-12 10:44:59

+0

@peterwkc在文檔中它說的那個? – 2010-10-12 19:41:43

+0

我只是假設情況是這樣的。抱歉。 – peterwkc 2010-10-14 02:10:21

14

你應該用condition_variable_any來代替,這個版本的語義是一樣的,但它允許各種鎖類型。然而,常規的condition_variable被認爲可能更快。