2009-04-28 67 views
1

是否有一個線程模型的工作原理類似以下內容:線程模型

while thread = nextAvailableThread(): 
    thread.doWork(data) 

這樣,當一個線程完成它觸發nextAvailableThread()返回此線程剛剛完成。這種模式可以使得在線程之間分配不均勻的數據塊變得更加容易,因爲您可以將下一塊數據傳遞到下一個可用線程並生成接近最優的數據分佈。

我特別感興趣的是在C++中使用它,但是我很樂意在任何語言中存在這樣的事情嗎?

編輯:線程池看起來就像我在想什麼。那麼,對於C++實現的任何建議?

+0

我在我的答案中添加了一個C++示例的鏈接。 – Yishai 2009-04-28 15:53:39

回答

3

聽起來像你正在尋找一個線程池。 Here是一篇文章,鏈接到不同語言的特定實現(位於底部的外部鏈接中)。

編輯:Here是一個C++的例子。

3

您可以使用阻塞工作隊列和一組工作線程。 Java有ThreadPoolExecutor,我相信.NET有一個類似的庫。

1

試試這個:threadpool

+0

看着它。它似乎不允許將參數傳遞給工作函數。 – marcog 2009-04-28 15:02:37

0

生產者/消費者模式可能是你在找什麼。

在最基本的配置中,您需要2個併發組件:thradsafe隊列和工作線程池。你可以在網上找到這些例子。

1

如果您使用.Net,您可以檢查Task Parallel Library

該庫使用起來非常簡單,但內部也有很多強大的功能。在它最簡單的形式,你可以使用這樣的:

Parallel.For(0, 100, delegate(int i) { 
    a[i] = a[i]*a[i]; 
}); 

和美麗的事情是,當一個內核準備好執行,將執行每個任務。在一個n核心機器上,在任何給定時刻它將只有n活動線程。

如果你有一些時間,你可以看到Daniel Moth的this session。即使你不使用.Net,看到這些問題如何解決的例子也很有趣。