生命的并行游戏 - 线程之间的信息交换

时间:2013-09-11 13:28:38

标签: multithreading synchronization message-queue conways-game-of-life

我正在尝试实现'Game Of Life'的并行版本。

这个并行版本将游戏的棋盘划分为区域,每个区域由一个线程管理,该线程负责计算该区域的下一个状态,然后进行状态更新。

我在这里面临的一个限制是 - “每个线程只允许访问自己的区域单元。所有其他信息应该通过其他内存从相邻线程传递”。

所以,我理解这一点的方式,即使一个线程试图只从其区域外的单元格读取,它也必须以某种方式从运行该单元格的特定线程请求此状态。

我们鼓励考虑生产者/消费者解决方案来完成这项任务,因此我考虑使用公共静态产品/消费者队列,状态请求应该排入队列,但是其他一些相关问题对我来说并不清楚:< / p>

  • 如果线程A正在进行工作,我怎么能要求它停止它的工作并交出线程B它的信息请求并在之后恢复它之前的工作?它甚至可能吗?

  • 哪个线程负责此队列?一个独特的线程,它管理队列与常规区域线程并行?我不确定。

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是想象每一轮都有多个步骤。 假设有N个线程。

  1. 第1步:每个线程都会生成一个需要发现的单元格列表。它将“问题”放在有N个队列之一(每个线程一个)。

  2. 等待所有线程完成

  3. 第2步:每个帖子填写其问题队列的回复

  4. 等待所有线程完成

  5. 第3步:每个线程计算其区域的新状态

  6. 等待所有线程完成