我正在尝试实现'Game Of Life'的并行版本。
这个并行版本将游戏的棋盘划分为区域,每个区域由一个线程管理,该线程负责计算该区域的下一个状态,然后进行状态更新。
我在这里面临的一个限制是 - “每个线程只允许访问自己的区域单元。所有其他信息应该通过其他内存从相邻线程传递”。
所以,我理解这一点的方式,即使一个线程试图只从其区域外的单元格读取,它也必须以某种方式从运行该单元格的特定线程请求此状态。
我们鼓励考虑生产者/消费者解决方案来完成这项任务,因此我考虑使用公共静态产品/消费者队列,状态请求应该排入队列,但是其他一些相关问题对我来说并不清楚:< / p>
如果线程A正在进行工作,我怎么能要求它停止它的工作并交出线程B它的信息请求并在之后恢复它之前的工作?它甚至可能吗?
哪个线程负责此队列?一个独特的线程,它管理队列与常规区域线程并行?我不确定。
答案 0 :(得分:1)
最简单的解决方案是想象每一轮都有多个步骤。 假设有N个线程。
第1步:每个线程都会生成一个需要发现的单元格列表。它将“问题”放在有N个队列之一(每个线程一个)。
等待所有线程完成
第2步:每个帖子填写其问题队列的回复
等待所有线程完成
第3步:每个线程计算其区域的新状态
等待所有线程完成