gpt4 book ai didi

c++ - 我应该如何在 C++ 中实现线程池?

转载 作者:行者123 更新时间:2023-11-28 03:43:50 25 4
gpt4 key购买 nike

我正在尝试将 C# 线程池移植到 C++,但遇到了一些严重的问题。 C# 线程池的一些特性是:

  1. 明确定义最大并发线程数
  2. 每个线程都使用 AutoResetEvent 定义
  3. 线程中的每个工作项都被重载,因此它可以将委托(delegate)函数作为其私有(private)成员。

例如,

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; }
}

有人知道是否存在具有类似功能的开源线程池吗?如果不是,那么实现这种线程池的正确方法是什么?谢谢!

最佳答案

我不确定它们的具体功能,但对于 C++ 中的开源线程池,请查看 boost threadpoolzthreads .

如果您只需要类似线程池的功能并且有一个支持它的编译器,您也可以只使用openmp 3.0 tasks。如果可能的话,这是我会选择的,因为 "boost"threadpool 乍一看不太令人信服(因此可能有相当多的开销)而且它看起来像 zthreads 不再积极开发(至少乍一看,我不是 100% 确定)。

不完全是 foss,但如果您可以接受许可(或准备投入大量资金...),则可能有用 Intel Threading Building Blocks基于

关于c++ - 我应该如何在 C++ 中实现线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8304182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com