我正在尝试将C#线程池移植到C ++中,但遇到了一些严重的问题。 C#线程池的一些功能是:
例如,
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();
}
WorkItem定义为:
public abstract class WorkItem {
protected int threadIndex;
public abstract void Run();
public int ThreadIndex {
get { return threadIndex; }
set { threadIndex = value; }
}
有人知道是否存在具有类似功能的开源线程池?如果没有,那么实现这样一个线程池的正确方法是什么?谢谢!
答案 0 :(得分:2)
我不确定它们的具体功能,但对于c ++中的开源线程池,请查看boost threadpool或zthreads。
如果您只需要类似线程池的功能并且有一个支持它的编译器,您也可以使用openmp 3.0
tasks
。如果可能的话,我会选择这个,因为"boost" threadpool
一眼就看起来不那么令人信服(因此可能有相当多的开销)并且似乎zthreads
不再被积极开发(至少乍一看,我不是百分百肯定的。
在不完全是化石的情况下,但如果您可以使用许可证(或准备投入相当多的钱......)可能是可用的。Intel Threading Building Blocks
几乎是基于踏板的