几个走在网格上的步行者:如何组织线程?

时间:2012-10-24 10:30:05

标签: multithreading

我的算法正在处理DEM。 DEM(数字高程模型)是地面地形的表示,其中在网格节点处已知高程。

我的问题可归纳如下: Q是包含要访问的节点的队列。 在开始时,网格的边界被推入Q.

while Q is not empty, do 
   remove Node N from the top of Q
   if N was never visited then do 
      consider the 8 neighbors of N
      among them select the unvisited ones
      among them select those with a higher elevation than N's
      push these at Q's tail
      mark N as visited
  done
done

如上所述,算法将标记为“访问”每个节点,可以通过连续上升路径从边界到达。值得注意的是,处理队列中节点的顺序并不重要。还要注意,某些点可能要求从边界到达曲折的上升路径。例如,想到一个围绕它的螺旋形的锥形。沟的山脊是一条独特的曲折路径,能够到达圆锥顶部而不会一直下​​降到沟槽中。

无论如何,我想对这个算法进行多线程处理。我仍然处于第一步,想知道哪个是最好的数据和线程组织,以便在编写野兽时尽可能减少痛苦。

我的第一个想法是将网格划分为图块并将网格分割成与网格中的图块一样多的图块。瓷砖堆放在工作清单中。一些线程正在解析工作列表并抓取任何可以在此处完成某事的磁贴。

处理特定的磁贴首先需要磁贴的队列不为空。如果助行器的磁贴必须访问磁贴边缘的节点,我可能还需要锁定相邻磁贴。

我在想当walker无法在需要时锁定相邻的tile时,它可以跳到本地队列中的下一个节点,甚至线程本身也可以将tile释放到工作列表并寻找另一块要处理的瓷砖。

我对多线程编程的实际经验足以理解这个可爱的描述很可能在我调试它时变成一场噩梦。然而,我没有足够的经验来评估算法编程的各种可能性并作出一个好的决定,记住我不会给一个月调试意大利面条菜。

感谢阅读:)

0 个答案:

没有答案