【发布时间】:2011-06-17 15:18:07
【问题描述】:
我正在尝试找出基本上线程化 for 循环的最佳方法。例如,如果我有以下循环:
for(int i = 0; i < n; i++)
doSomethingThreadSafe(i);
这将在 Windows 平台上。我一直在为每个处理器创建一个线程,然后尝试为每个处理器尽可能均匀地划分 n。然后我将必要的数据传递给每个线程,然后使用 WaitForMultipleThreads。有一个更好的方法吗?我不想使用任何其他库,例如 boost。
理想情况下,我想要一些通用的(可能是模板化的)方法来解决这个问题。即
threaded_for(0, n, doSomethingThreadSafe);
如果最好/最有效的方法是使用库,添加库需要做多少工作,以及在此示例中将如何使用它。不过,我更喜欢不需要添加其他内容的解决方案。
【问题讨论】:
-
由于您不想使用外部库,因此您将无法使用 OpenMP,这正是您在这种情况下应该使用的。
-
您在线程中实际在做什么?会有需要同步的共享资源吗?
-
@ThomasMcLeod 一切都已设置好,因此不需要同步。他们都将独立做事。
-
那么,有什么问题吗?你想平均分配工作吗?
-
parallel_for 能帮到你吗? msdn.microsoft.com/en-us/library/dd505035.aspx
标签: c++ windows multithreading for-loop