0

我正在尝试实现“生命游戏”的并行版本。

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

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

因此,按照我的理解,即使一个线程尝试仅从其区域之外的单元格读取,它也必须以某种方式从运行该单元格的特定线程请求此状态。

我们被鼓励考虑这个任务的生产者/消费者解决方案,因此我考虑使用公共静态生产者/消费者队列,状态请求应被排入队列,但我不清楚其他一些相关问题:

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

  • 哪个线程负责这个队列?与常规区域线程并行管理队列的唯一线程?我不确定。

4

1 回答 1

1

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

  1. 第 1 步:每个线程创建一个需要发现的单元格列表。它将“问题”放在存在的 N 个队列之一中(每个线程一个)。

  2. 等待所有线程完成

  3. 第 2 步:每个线程为其问题队列填充响应

  4. 等待所有线程完成

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

  6. 等待所有线程完成

于 2013-09-11T13:41:54.587 回答