2011-11-29 71 views
0

我試圖將C#線程池移植到C++中,但遇到了一些嚴重問題。一些C#線程池的特點是:我應該如何在C++中實現線程池?

  1. 定義超載明確
  2. 每個線程定義使用的AutoResetEvent
  3. 在線程中的每個工作項的併發線程的最大數量,以便它可以有委託職能作爲其私人成員。

例如,

private static void RunOrBlock(WorkItem workitem) { 
    workItem.ThreadIndex = WaitHandle.WaitAny(threadUnoccupied); 
    ThreadPool.QueueUserWorkItem(threadWorker, workItem); 
} 

private static void threadWorker(object o) { 
    WorkItem workItem = (workItem) o; 
    workItem.Run(); 
    threadUnoccupied[workItem.ThreadIndex].Set(); 
} 

工作項目被定義爲:

public abstract class WorkItem { 
    protected int threadIndex; 
    public abstract void Run(); 
    public int ThreadIndex { 
    get { return threadIndex; } 
    set { threadIndex = value; } 
    } 

是否有人知道是否存在具有類似功能的一個開放源碼的線程池?如果沒有,那麼實施這種線程池的正確方法是什麼?謝謝!

+2

嘗試Boost.Threadpool非常treadpool: - ) –

+0

有兩件事情:1)編寫一個合理的線程池實現需要大概一週的時間,尤其是如果使用C++ 11; 2)沒有Boost.Threadpool庫,我不推薦在sourceforge上使用線程池,這是非常低效和天真的設計。 –

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms686980%28v=vs.85%29.aspx –

回答

2

我不確定他們的具體功能,但對於C++中的開源線程池看看boost threadpoolzthreads

如果你只是需要一個類似於線程池的功能並且有一個支持它的編譯器,那麼你也可以使用openmp 3.0tasks。如果可能的話,這是我會選擇的,因爲"boost" threadpool看起來並不令人信服(所以可能會有相當多的開銷),看起來zthreads似乎不再被積極開發(至少乍一看, m不是100%肯定)。

在不完全開放源碼軟件,但可能是可用的,如果你可以發牌生活(或準備投資了不少錢......)Intel Threading Building Blocks是基於