[英]Boost: Two worker threads, sleep the main thread until they both finish
我已經使用Boost線程編寫了一個程序。 我分配了兩個緩沖區(每個工作線程一個),以存儲一些要處理的信息。 他們坐下來等待某些東西出現在緩沖區中,然后對其進行處理並將結果放置到另一個緩沖區中。 我的緩沖區實現是線程安全的。 目前,我讓主線程處於繁忙等待狀態,直到緩沖區大小為零為止,但這確實效率很低,因為它必須繼續請求控制緩沖區,然后檢查緩沖區大小。 我想要一種使主線程處於睡眠狀態的方法,直到兩個工作線程都表明它們已完成。 我相當確定可以使用boost::condition_variable
來實現,但是我不確定如何使用兩個工作線程來實現。
幫助極大的贊賞。
編輯-另外, boost::barrier
也適合嗎?
您也可以使用thread :: join方法。 此方法將等待線程完成(線程函數返回)。
有關join的更多信息。
我認為障礙不會幫助您。 屏障允許停止線程處理,直到所有線程都遇到屏障為止。 當所有線程都調用了barrier :: wait時,所有線程都將停止等待。
緩沖區大小為0似乎是條件變量的謂詞。 該大小必須以某種方式由互斥體保護。 在鎖定該互斥鎖以更改緩沖區大小的任何位置,都必須在大小為零時向條件變量發送信號。
當條件不成立時,新的wait_for_zero_size()函數必須鎖定互斥鎖,並在循環中查找該謂詞以等待條件變量:
void buffer::wait_for_zero_size()
{
boost::mutex::scoped_lock lock( mutex_ );
while ( size_ != 0 )
condition_.wait( lock );
}
HTH,托斯滕
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.