【发布时间】:2020-08-03 20:24:30
【问题描述】:
我想多次模拟一个场景,即 repCnt = 100。为了加快进程,我想使用多个线程,它们并行工作并在必须将结果记录到文件中时使用互斥锁。
他们需要通过以 NUM_THREADS = 4 为一组工作来从重复总数中扣除。使用互斥锁的日志记录部分很容易,但我不知道主循环应该是什么样子。
这是一个开始:
NUM_THREADS = 4
void simulate(struct argType arg) {
}
int main() {
// ... Some code here ...
vector<thread> vecOfThreads;
for (rep = 0; rep < repCnt; rep++) {
// Here they should work in groups of 4, i.e., rep = 1, 2, 3, 4
// They need to call the simulate(struct argType) function while they are working
// Once a thread is done, it should get the next task from the loop, i.e., rep = 5
}
return 0;
}
当我在 C++ 中搜索线程池时,我发现所有的类和方法太多。应该有一种更快的方法来完成我想要实现的目标。有人可以帮我写出最简单最短的 C++ 代码吗?
【问题讨论】:
-
arg中有什么内容?每次通话都一样吗? -
所有快速简单的解决方案都将涉及在每次循环迭代中创建和销毁线程。该标准不能很好地支持线程池,并且在 Networking TS 或类似的东西被合并之前不会支持。你可以使用像 Boost.Asio 这样的库吗?还是平台特定的线程池?
-
您的编译器是否支持 OpenMP?在那里,您可以轻松地创建一个并行区域并在循环中定义 tasks。不幸的是,C++ 线程并不支持这么简单的解决方案。
-
这能回答你的问题吗? Thread pooling in C++11
-
这里有一些非常简单的线程队列代码here。您可以根据需要对其进行调整。
标签: c++ multithreading threadpool