线程模型

时间:2009-04-28 13:47:24

标签: multithreading

是否存在类似以下内容的线程模型:

while thread = nextAvailableThread():
  thread.doWork(data)

这样当一个线程完成时,它会触发nextAvailableThread()以返回刚完成的线程。这个模型会使线程之间的数据块分布更加容易,因为您可以将下一个数据块传递给下一个可用线程,并产生接近最优的数据分布。

我对在C ++中使用它特别感兴趣,但我很高兴在这里有任何语言存在这样的东西吗?

编辑:线程池看起来就像我在想的那样。那么,有关C ++实现的任何建议吗?

5 个答案:

答案 0 :(得分:3)

听起来你正在寻找一个线程池。 Here是一篇文章,其中包含指向不同语言的特定实现的链接(在底部的外部链接中)。

编辑:Here是一个C ++示例。

答案 1 :(得分:3)

您可以使用阻止工作队列和一组工作线程。 Java有ThreadPoolExecutor,我确信.NET有一个类似的库。

答案 2 :(得分:1)

试试这个:threadpool

答案 3 :(得分:1)

如果您使用.Net,则可以查看Task Parallel Library

该库非常易于使用,但内部也有许多强大的功能。在它最简单的形式中,你会像这样使用它:

Parallel.For(0, 100, delegate(int i) { 
   a[i] = a[i]*a[i]; 
});

美妙的是,只要核心准备好执行,它就会执行每个任务。在 n 核心机器上,它在任何给定时刻都只有 n 活动线程。

如果你有时间,可以看看Daniel Moth的this session。即使您没有使用.Net,也可以看到一些如何解决这些问题的例子。

答案 4 :(得分:0)

生产者/消费者模式可能正是您所寻找的。

在最基本的配置中,您需要2个并发组件:thradsafe队列和工作线程池。您可以在网上找到这些的好例子。