簡體   English   中英

等待任務在線程池中完成

[英]Wait for tasks to get completed in threadpool

我在C ++中創建了一個線程池,它將所有任務存儲在隊列中。 線程池啟動n個線程,這些線程從隊列中獲取任務,處理每個任務,然后從隊列中刪除任務。

現在,我想等到所有任務完成。 檢查空隊列以完成任務可能不起作用,可以為每個線程提供任務並且隊列可以被清空但是任務仍然可以處於處理模式。

我不知道如何等待所有任務完成。這是一個設計問題。 有什么建議?

你需要等待所有線程完成,還是只需要檢查?

如果你只需要檢查,你可以有存儲的當前正在執行的任務數的變量,並InterlockedIncrement它在一個線程的開始,然后InterlockedDecrement它在最后。

如果你需要等待,而你有一個小數目的線程,每個線程都可以有你自己的手動重置事件ResetEvent線程開始,當SetEvent當它完成。 然后只為所有事件WaitForMultipleObjects

使用sentinal任務告訴處理線程退出。 將這些任務中的n個放在隊列中。 然后加入你的線程池。

你可以明顯地修改它,這樣你就可以做一些讓池保持活動的東西,而不是使用exit / join進行同步。 例如,每個線程可以在某種條件變量或屏障上進行同步,或者當它使一個傳遞的任務出列時計數信號量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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