多线程可以影响康威的生命游戏克隆吗?

时间:2010-07-21 16:28:25

标签: multithreading cellular-automata

我一直在实施这个小游戏的想法,它(不知何故?)类似于康威的生命游戏:

0)你有一个彩色矩阵(RGB值) 1)如果相邻单元格的X值低于Y,则在该单元格上放置Y = 0    (其中X和Y为红色||绿色||蓝色) 2)红色节拍蓝色节拍红色

我正在做什么现在它只是逐个细胞,检查是否满足上述规则。然而,这种行为并不是我想要的,因为有时第一行的单元格比结束行的单元格有优势。

多线程可以阻止这种情况(例如,启动两个线程,一个在第一个单元格中启动,另一个在最后一个单元格中启动)?请原谅我对并发性的无知,但我觉得这是开始使用它的好方法。

4 个答案:

答案 0 :(得分:7)

我的猜测是你正在更新矩阵,而你应该复制保持跟踪矩阵的旧状态,更新一个新的,然后用更新的原始替换。 这样,您不会更新某些单元格,然后在下一行测试它们的值。 因此,这将是一个算法问题,与编程无关(因此多线程无法帮助)。

答案 1 :(得分:3)

没有。你的问题是一个固有的缺陷。您遇到的问题是您正在使用中间结果,即在此更新中,一个单元格中的更改会立即影响下一个单元格。它不应该。您应该创建一个新矩阵,将更改后的值存储在那里,然后交换它们以便加载新值。重复。

答案 2 :(得分:1)

你最好调整算法以防止这种情况发生。

依靠多线程来改变行为并不是一件好事。实际上,这是尝试在您的代码中引入竞争条件。通常,在向算法添加多线程时,首要任务是阻止行为的任何更改。

通过尝试使用竞争条件来改变行为,你会使这非常不确定,但不是很好。尝试为此提出不同的解决方案(可能使用伪随机数生成器等),然后引入多线程以使其更快(希望不影响结果),你会好得多。

答案 3 :(得分:0)

这取决于您选择多线程处理的哪个部分。 prototypical多线程示例是矩阵乘数。您基本上可以将其分解为象限并计算每个线程中的一个象限,除了原始矩阵之外不共享信息。请注意,生命游戏是一个稀疏矩阵,may or may not受益于多线程。

但是,如果您决定这样做,请记住,所有内容都应计算“下一回合”所需的内容并将其置于新矩阵中,当交换矩阵时(最好不要复制,只需在转弯结束时更改某个位置的指针,以便一个线程不会更改其他线程需要进行计算的值。因此,线程不能被允许彼此“先行一步”。这可能意味着使用多个线程效率低下 - 您的里程可能会有所不同。