在c ++中循环使用循环

我试图找出最基本的线程循环的方法。 例如,如果我有以下循环:

for(int i = 0; i < n; i++) doSomethingThreadSafe(i); 

这将在Windows平台上。 我曾经为每个处理器创build一个线程,然后试图尽可能均匀地为每个处理器分配n个线程。 然后我将必要的数据传递给每个线程,然后使用WaitForMultipleThreads。 有一个更好的方法吗? 我不想使用任何其他库像boost。

理想情况下,我希望有一些通用的(也许是模板的)方法来解决这个问题。 即

 threaded_for(0, n, doSomethingThreadSafe); 

如果最好/最有效的方式是使用一个库,那么需要多less工作来添加这个库,以及在这个例子中究竟使用多less工作。 不过,我更喜欢一个解决scheme,不需要添加其他东西。

最简单的方法是openMP – visual studio支持它作为标准,你只需在循环中添加一些魔术#pragma,并使用所有的核心!

最好的学习方法就是不要这样做 – 32个针对C ++开发者的OpenMP陷阱

另一种方法 – 但稍微复杂的方法英特尔TBB

到目前为止,解决这个问题最有效的方法是,假设doSomethingThreadSafe(i)基本上是一个重复的指令(对多个数据的单指令) 就是使用OpenMP,就像chrisaycock所说的那样。

 #pragma omp parallel for for ( i = 0; i < n; i++ ) doSomethingThreadSafe(i); 

它不能比这更简单,真的。