c++ - 分割数据进行多线程处理

标签 c++ multithreading parallel-processing

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

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++ 的),我会很高兴听到它们。谢谢!

最佳答案

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

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

关于c++ - 分割数据进行多线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017963/

相关文章:

c++ - 复制ctor和复制赋值运算符const关键字位置

c++ - 显示断言对话框时提供 Windows 消息服务吗?

c# - C#:并行形式,多线程和 “applications in application”

c# - .NET - 线程同步

R: makePSOCKcluster 超线程 50% CPU 核心

scala - 将至强融核与基于 JVM 的语言结合使用

c++ - 写入文件时检查错误

c++ - 尝试设置用户定义的消息处理程序时出现堆栈溢出(!)

java - 有条件地定义同步块(synchronized block)

multithreading - 对并行Haskell感到困惑