簡體   English   中英

Boost:兩個工作線程,將主線程休眠,直到它們都完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM