1

我正在尝试了解多线程以及如何使用它对一组数据并行执行任务。例如,如果我有一个数字数组,我想对其执行相当长的操作,我创建了以下代码来处理它:

mutex mm;
int nums[] = {10,20,30,40,50,60,70,80,90};
int index = 0;

void threadProc()
{
    while (index != sizeof(nums)/sizeof(nums[0])) //While != to end of array
    {
        mm.lock();
        int num = nums[index]; //Create local copy so we can unlock mutex for other threads
        index++;
        mm.unlock();
        cout << num + 2; //Replace with time-consuming function
    }
}

int main()
{
    //Create 2 threads
    thread t(threadProc);
    thread a(threadProc);
    t.join();
    a.join();
}

由于我是根据我认为合乎逻辑的内容创建此代码,这是正确的方法吗?当然,我可以根据 CPU 拥有的硬件线程的数量添加更多线程,但我在这里寻求总体思路。如果这方面有任何好的资源(最好是面向 C++ 的),我会很高兴听到这些。谢谢!

4

2 回答 2

2

通常,您有两种选择:基于线程的并行性或基于任务的并行性。第一种是最传统的方法,pthreads 和 OpenMP 就是一个很好的例子。在第二种选择中,您有一个抽象级别,您可以将并行程序视为一组映射到线程的任务。学习计算模型的一个很好的参考是 Cormen 算法介绍的第 27 章(http://mitpress.mit.edu/sites/default/files/titles/content/9780262033848_sch_0001.pdf)和一些编程工具是CilkPlus ( http://cilkplus.org/ )、线程构建块 ( http://threadingbuildingblocks.org/ )、OpenMP 任务 ( http://openmp.org/wp/ ) 和 Microsoft 的任务并行库 (http://msdn.microsoft.com/en-us/library/dd460717.aspx)。

最后,您可以阅读多处理器编程的艺术 ( http://www.amazon.com/The-Multiprocessor-Programming-Maurice-Herlihy/dp/0123705916 )

于 2013-09-27T02:49:51.763 回答
0

几年前我从 OReilly 的 Pthread Programming 一书中学到了,我在这里也看到了它的引用多线程编程 C++

于 2013-09-26T04:02:38.510 回答