マルチスレッドはコンウェイの生活クローンのゲームに影響を与えることができますか?

StackOverflow https://stackoverflow.com/questions/3301562

  •  26-09-2020
  •  | 
  •  

質問

この小さなゲームのアイデアを実装しています。コンウェイの生活のゲームと同様の(どういうわけか?):

0)色付きドットのマトリックス(RGB値) 1)隣接セルがあなたのyより低いx値を持つ場合は、そのセルにy= 0を入れる (xとyは赤||緑||青) 2)赤いビート緑色のビートブルービート赤

私が今やっているのは、セルごとに携帯移動しているのですが、上記の規則が満たされているかどうかを確認してください。しかし、その動作は、時には最初の行のセルが終了行の上のものよりも有利であるため、意図したものではありません。

マルチスレッドはこれを防ぎます(つまり、2つのスレッドを起動し、最初のセルで最初のセルで開始するものと最後の1つはもう1つ)は?並行性に私の無知を赦してくださいが、私はこれがそれを使って仕事を始めるのがいい方法だったと感じました。

役に立ちましたか?

解決

私の推測はあなたがMatrix Inplaceを更新しているのですが、あなたはマトリックスの古い状態を追跡して新しいものを更新してから、元のものを更新されたものに置き換える必要があります。 このようにして、いくつかのセルを更新することはなく、次の行でそれらの値をテストします。 したがって、プログラムに関連しないアルゴリズムの問題になります(したがって、マルチスレッドは役に立ちません)。

他のヒント

いいえ。あなたの問題は固有の欠陥です。あなたが持っているトラブルはあなたが中間結果を使用していること、すなわち1つのセルの変化は、この更新ではすぐに次のセルに影響を与えることです。そうではありません。新しい行列を作成し、そこに変更された値を保存してから、新しい値がロードされるようにそれらを交換する必要があります。繰り返し。

これを防ぐためにアルゴリズムを適合させるのが良いでしょう。

行動を変えるためのマルチスレッドに頼ることは良いことではありません。これは本質的に、あなたのコードに競争条件を導入しようとしています。通常、アルゴリズムにマルチスレッドを追加すると、最初の優先順位はの動作の変化を防ぐことです。

行動を変えるために競走状態を使うことを試みることによって、あなたはこの非常に決定的なものを作っていますが、良い方法ではありません。これに対する別の解決策を思いつくことを試みるのは、(疑似乱数発生器などを使用して)、それからそれをより速くするためにマルチスレッドを導入しようとしています(結果に影響を与えることなく)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top