多线程会影响康威的生活游戏吗?
-
26-09-2020 - |
题
我一直在实施这个小游戏想法,这是(不知何故?)类似于康威的生活游戏:
0)您有一个彩色点的矩阵(RGB值) 1)如果相邻的单元格的x值比Y较低,请在该单元格上放置y= 0 (其中x和y是红色的,green ||蓝色) 2)红节拍绿色节拍蓝拍红色
我现在正在做什么,它只是通过细胞进行的牢房,检查是否满足上述规则。但是,行为它不是我想要的,因为有时第一行上的细胞有优势在结束行中的优势。
可以多线程防止这一点(例如,启动两个线程,一个在第一个单元中发起一个,另一个在最后一个中)?请原谅我对并发的无知,但我觉得这是开始与之合作的好方法。
解决方案
我的猜测是您正在更新矩阵,而您应该复制矩阵的旧状态,更新一个新的,然后通过更新替换原始的轨道。 这样,你不会更新一些小区,然后在下一行上测试它们的值。 因此,它将是一个算法问题,与程序化无关(因此多线程无法帮助)。
其他提示
否。你的问题是一个固有的缺陷。您拥有的问题是您使用中间结果,即,在此更新中,一个单元格的更改会立即影响下一个单元格。它不应该。您应该创建一个新矩阵,将更改的值存储在那里,然后交换它们,以便加载新值。重复。
您将更好地调整算法以防止这一点。
依靠多线程来改变行为不是好事。实质上,这试图将竞争条件介绍到您的代码中。通常,在向算法添加多线程时,第一个优先级是<强>防止行为的任何变化。
通过尝试使用竞争条件来改变行为,您将使这是非常非确定性的,但不是以好方法。你会更好地尝试提出不同的解决方案(可能使用伪随机数发生器等),然后引入多线程以使其更快(希望不影响结果)。
取决于您选择多线程的处理部分。 原型多线程示例是Matrix乘法器。您可以将其基本上分解为象限并在每个线程中计算一个象限,除原始矩阵之外没有共享信息。请注意,生命游戏是稀疏矩阵,而且”可能“或可能不会受益于多线程。
但是,如果您决定这样做,请记住,一切都应该计算它需要的“下一步”,并将其放在一个新的矩阵中,在矩阵中交换(优先不复制,只需在转弯结束时更改一个指针某个位置),因此一个线程不会更改其他需要执行它们的计算的值。所以线程不能被允许“转向前进”其他。这可能意味着它与多个线程有效,你的里程可能会有所不同。