2014-12-01 87 views
0

我有一個典型的場景: 假設線程A和線程B將訪問std:list。 線程A將推送一個項目列表,線程B將從列表中彈出該項目。如何使一個線程在std :: list上等待一個值?

我的問題是:如何讓線程B等待,直到隊列中有數據。

+0

關於將列表項限制爲特定值的含義是什麼?你能給個例子嗎? – Cameron 2014-12-01 15:44:56

回答

2

如何讓線程B等待,直到隊列中有數據。

結賬std::condition_variable。使用條件變量,線程可以等待(旋轉,然後睡眠)變量,直到不同的線程在同一個變量上發出信號並喚醒等待的線程。

+0

我想提醒人們在鏈接示例中特別注意Predicate lambda。 wait()調用將繼續等待Predicate函數返回true。這個非常重要。 – 2014-12-01 15:57:28

+0

如果我使用POSIX condition_variable,是否需要兩個pthread_mutex?一個互斥量,我需要使pthread_cond_wait和其他隊列上具有讀/寫鎖定? – Bhush 2014-12-04 10:12:12

+0

@Bush你通常只使用一個'std :: mutex'。看一個例子http://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/ – 2014-12-04 13:29:57

相關問題