Frage

Ich habe diese kleine Spielidee umgesetzt, was (irgendwie?) Ähnlich wie Conways Spiel des Lebens:

0) Sie haben eine Matrix von farbigen Punkten (RGB-Werte) 1) Wenn die benachbarte Zelle einen niedrigeren X-Wert hat als Ihr y, setzen Sie y= 0 auf diese Zelle (Wobei x und y rot sind || grün || blau) 2) Rote Beats Green Beats Blue Beats rot

Was ich jetzt mache, ist es nur mit Zellen, indem Sie die obigen Regeln erfüllt sind.Das Verhalten ist jedoch nicht ganz, was ich beabsichtigt habe, da manchmal Zellen an den ersten Reihen an den endenden Reihen Vorteil haben.

Kann Multithreading dies verhindern (sagen Sie zwei Threads, ein Initiieren in der ersten Zelle und dem anderen auf dem letzten)?Bitte verzeihen Sie meine Unwissenheit in der Parallelität, aber ich hatte das Gefühl, dass dies eine schöne Art war, mit der Arbeit zu arbeiten.

War es hilfreich?

Lösung

Meine Vermutung ist, dass Sie den Matrix-APPLIP-Aktualisieren aktualisieren, während Sie kopieren sollten, während Sie einen Track des alten Zustands der Matrix halten, ein neues aktualisieren, ein neues aktualisieren und dann das Original durch das aktualisierte Austauschen ersetzen. Auf diese Weise aktualisieren Sie keine Zellen, dann testen Sie auf der nächsten Zeile ihre Werte. Somit wäre es ein Algorithmusproblem, das nicht mit der Programmierung zusammenhängt (und daher kann Multithreading nicht helfen).

Andere Tipps

nein.Ihr Problem ist ein inhärenter Fehler.Die Probleme, die Sie haben, ist, dass Sie Zwischenergebnisse verwenden, d. H. Die Änderung in einer Zelle betrifft die nächste Zelle sofort in diesem Update.Es sollte nicht.Sie sollten eine neue Matrix erstellen, die geänderten Werte dort speichern, und tauschen Sie sie anschließend so, dass die neuen Werte geladen werden.Wiederholen.

Sie werden besser sein, um Ihren Algorithmus anzupassen, um dies zu verhindern.

sich auf Multithreading zu verlassen, um das Verhalten zu ändern, ist nicht eine gute Sache.Dies ist im Wesentlichen versucht, einen Rennzustand in Ihren Code einzuführen.Beim Hinzufügen von Multi-Threading an einen Algorithmus ist die erste Priorität auf Verhindern des Verhaltens.

Wenn Sie versuchen, einen Rennzustand, um das Verhalten zu ändern, machen Sie dies nicht deterministisch, aber nicht auf einen guten Weg.Sie würden viel besser sein, um zu versuchen, eine andere Lösung dafür zu ermitteln (möglicherweise mit einem Pseudo-Zufalls-Ziffern-Generator usw.) und dann ein Multi-Threading, um es schneller zu machen (hoffentlich, ohne die Ergebnisse zu beeinflussen).

Es hängt davon ab, welchen Teil der Verarbeitung, die Sie für Multithread entscheiden. Das prototypisch Multithreading-Beispiel ist der Matrix-Multiplizierer. Sie können es grundsätzlich in Quadranten zerbrechen und in jedem Thread einen Quadranten berechnen, ohne Informationen außer der ursprünglichen Matrix zu teilen. Beachten Sie, dass das Spiel des Lebens eine spärliche Matrix ist, und kann oder dürfen nicht von multithreading profitieren.

Wenn Sie jedoch entscheiden, denken Sie daran, dass alles berechnet wird, was er berechnen sollte, was es für das "NEXT Turn" muss "und in eine neue Matrix auftauchen, wenn Sie in der Matrix tauschen (vorzugsweise nicht kopieren, Ändern Sie einfach einen Zeiger irgendwo platzieren) am Ende der Wende, so dass ein Thread nicht die Werte ändert, die die anderen ihre Berechnungen durchführen müssen. Daher kann der Thread nicht erlaubt sein, "eine Erinnerung" von jedem zu erhalten Andere. Dies kann bedeuten, dass es sich als ineffizient herausstellt, mit mehreren Threads zu tun - Ihre Kilometerzahl kann variieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top