如何在c++中实现线程池?
How should I implement a thread pool in 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; }
}
有人知道是否存在一个具有类似功能的开源线程池吗?如果不是,实现这样一个线程池的正确方法是什么?谢谢!
我不确定它们的具体功能,但是对于c++中的开源线程池,请查看boost threadpool或zthreads。
如果你只是需要一个线程池的功能,并且有一个编译器支持它,你也可以只使用openmp 3.0
tasks
。如果可能的话,这是我会选择的,因为"boost" threadpool
乍一看并不很有说服力(所以可能有相当多的开销),而且zthreads
似乎不再积极发展(至少乍一看,我不是100%肯定)。
不完全是自由/开源软件,但如果你能接受许可(或者准备投入相当多的钱…)Intel Threading Building Blocks
基本上是基于跑步池的
相关文章:
- 在c++队列中使用pop和visit实现线程安全
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- 线程如何在 C++ 中实现
- 实现在多线程代码中安全恢复的断点
- 在C++线程内实现多个计时器的最安全方法
- 我是否需要在 OpenSSL 1.1.0+ 中使用加密锁定函数来实现线程安全?
- 实现多线程后"Project.exe has triggered a breakpoint"
- OpenMP:共享同一算法的单线程和多线程实现
- 线程池 C++ 实现问题
- 如何使用C 11 STD ::线程实现类似Qthread的类
- C++11线程实现后端
- 在 C++11 中使用期货、异步和线程实现搜索
- MSVC 2012 RC std::线程实现中的最大参数数
- C++ STL 算法(列表排序)OpenMP/多线程实现
- 多线程实现中的errno
- MD5暴力攻击高效多线程实现
- Swapcontext在多对多线程实现中失败
- 通过线程实现游戏引擎决定论
- 如何使用POSIX线程实现阻塞读取