gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:14:14 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com