如何在原生c++中并行化简单的for循环,使其在visual studio 2010 express中工作

How to parallelize simple for loop in native c++ so that it works in visual studio 2010 express

本文关键字:visual studio 2010 工作 express for c++ 原生 并行化 简单 循环      更新时间:2023-10-16

我有一个非常简单的for循环,我想并行化(Windows窗体混合代码应用程序):

const size_t NumThreads = 4;
class Worker{
   public: void work();
};
vector<T> v(NumThreads); //Number of objects is exactly equal to number of threads
for(size_t i=0; i<NumThreads) v[i].work();

"工人"是完全独立的,所以我不必担心数据竞争和其他多线程问题。我所需要做的就是等待所有的工人完成他们的工作,然后继续进行下一步。

但是这个简单的任务恰好是个大问题:

  • 我想使用本地c++并行化,因为我以后可能会在Linux上使用这些类。

  • MSVC 2010 Express不支持OpenMP

  • Boost::Thread不能用/clr编译。(早些时候,我拼命地试图使Boost::serialization编译,最后放弃并编写了自己的序列化类)。

  • std::thread是c++11标准的一部分,在MSVC 2010中不支持。

你能推荐一些本地c++的并行化方法并保证与MSVC 2010 Express兼容吗?毕竟,这是一个非常简单的并行化任务,即使使用c风格的多线程也不应该非常复杂。

您考虑过线程构建块(TBB)吗?Windows和Linux都支持它。

这里有一个快速教程。你可以这样做:

tbb::parallel_for( size_t(0), NumThreads, [&]( size_t i ) {
    v[i].work();
} );