2010-04-17 98 views
2

我試圖完成這樣的事情:C++提升線程重用線程

thread t; // create/initialize thread 
t.launch(); // launch thread. 
t.wait(); // wait 
t.launch(); // relaunch the same thread 

如何去實現這樣的使用boost線程?本質上,我需要持久的可重新啓動的線程。

我想,以避免工作隊列,因爲在我的情況下實現有一定的困難

感謝

回答

4

你只想讓線程運行在一個循環。它試圖從隊列中取出一部分「工作」,執行工作,然後返回隊列。當隊列爲空時,它等待。

然後從另一個線程中,您可以插入工作項到隊列中,以便線程執行它們。

再次讀你的問題,你是說你想讓你的主線程通知工作線程開始工作,但主線程必須立即開始等待工作完成?這意味着一次只能運行一個線程。這是沒有意義的。線程是爲併發執行而設計的。

假設這不是你想要的,那麼我想知道什麼比簡單的工作線程跑出隊列更簡單。線程正在工作或等待。因此,您需要一些允許主人和工人之間進行通信的數據結構,以便工作人員可以等待工作物件到達,並且主人可以發送工作物件,以喚醒工作人員,然後在工作物件完成時,工人等待另一個。

+0

這是另一種選擇。 但是在我的情況下,工作隊列有點複雜。如果我有主線程分配工作(這是我正在嘗試做的),它會簡單得多 – Anycorn 2010-04-17 16:25:06

+0

@aaa - 請參閱update;除非你完全擺脫線程,否則我看不出如何做比這更簡單的事情。 – 2010-04-17 16:35:53

+0

工作結構是一個帶有奇怪邊界的嵌套循環,並非所有線程都可以處理所有工作。然而,我確實設法實施了積壓的平面任務隊列。這可能是更可擴展的方法 – Anycorn 2010-04-18 01:34:56