0
我试图将C#线程池移植到C++中,但遇到了一些严重问题。一些C#线程池的特点是:我应该如何在C++中实现线程池?
- 定义超载明确
- 每个线程定义使用的AutoResetEvent
- 在线程中的每个工作项的并发线程的最大数量,以便它可以有委托职能作为其私人成员。
例如,
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; }
}
是否有人知道是否存在具有类似功能的一个开放源码的线程池?如果没有,那么实施这种线程池的正确方法是什么?谢谢!
尝试Boost.Threadpool非常treadpool: - ) –
有两件事情:1)编写一个合理的线程池实现需要大概一周的时间,尤其是如果使用C++ 11; 2)没有Boost.Threadpool库,我不推荐在sourceforge上使用线程池,这是非常低效和天真的设计。 –
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686980%28v=vs.85%29.aspx –