2011-11-29 72 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是基于