2012-08-22 6 views
5

Ich möchte ein einfaches Tic Tac Toe-Spiel erstellen, das zwischen Benutzern eines SAP-Systems abgespielt wird.ABAP: shared memory objects synchronization

Ich habe eine Klasse CL_TTT_MANAGER mit einer SIGNUP-Methode, die Spieler einem Spiel zuweist. Meine Klasse ist eine Shared-Memory-fähige Klasse, da sie für alle Benutzer eines SAP-Systems geeignet ist.

Die Anmeldung wird mit einem sehr einfachen Algorithmus durchgeführt.

1: Ein Flag "WAITING_FOR_PLAYERS" existiert und ist auf ABAP_FALSE gesetzt. anfänglich. 2: Wenn ein erster Spieler "SIGNUP" aufruft, wird das Flag auf "ABAP_TRUE" gesetzt. 3: Wenn ein zweiter Spieler "SIGNUP" aufruft, wird das Flag auf "ABAP_FALSE" gesetzt und die Spielinstanz wird erstellt.

Das Problem mit meiner SIGNUP-Methode ist, dass sie sich auf den Status verlässt, nämlich dass sie sich den Namen des ersten Spielers merken muss, und dies wird mit einem privaten Attribut erreicht.

Für jeden von Ihnen, die mit Nebenläufigkeitsproblemen gearbeitet haben, werden Sie ein Datenrennen sehen, nämlich wenn sich unmittelbar nach der Anmeldung des zweiten Spielers ein dritter Spieler registriert, könnte der Name des ersten Spielers durch ersetzt werden der Name des Dritten.

Wie synchronisiere ich diese Dinge in abap? Welchen Mechanismus habe ich dafür? Ich habe so etwas in der Dokumentation nicht gesehen (ich habe nur für 2 Monate studiert). Muss ich das selbst umsetzen, oder hilft mir etwas?

+0

gut SAP ist ein Unternehmen (wie Oracle) und ABAP ist ihre proprietäre Sprache (wie Java) .... aber nur für die Programmierung ihrer Systeme verwendet. –

Antwort

3

Dies sollte kein Problem sein - bevor der dritte Spieler in den Shared Memory Bereich schreiben kann, muss er einen Change Handle erhalten, und er wird nicht in der Lage sein, einen zu bekommen, solange der zweite Benutzer noch ist hat eine Änderungssperre gesetzt. See the docs für detailliertere Informationen zu diesem Thema.

Beachten Sie, dass stabile und zuverlässige Shared Memory-Programmierung eine der schwierigsten Aufgaben in einer ABAP-Umgebung ist (wahrscheinlich in jeder Umgebung). Ich weiß von Ihren anderen Fragen, dass Sie relativ neu in ABAP sind - es ist ambitioniert, so früh mit gemeinsamen Objekten zu beginnen.

+0

Danke für die Info und den Rat. Ich bin zur Zeit kinna verantwortlich für meine eigene Ausbildung, so dass ich vielleicht nicht immer weiß, wenn ich während meiner Coding Adventures in ein ABAP-Minenfeld steige :). –

+0

Das ist eins, vertrau mir. Es handelt sich um ein selektives Minenfeld, das nur Entwicklungs- und Testsysteme mit zentraler Instanz passieren lässt und nur Produktionsumgebungen mit mehreren Anwendungsservern in die Luft jagt. – vwegert

+0

Gut thx für die Warnung. Hab noch nichts von der Gefahr gehört, also werde ich aufpassen. Hätten Sie vielleicht Vorschläge, wie die Kommunikation zwischen zwei Instanzen von zwei verschiedenen Benutzern auf andere Weise erfolgen könnte (mit Ausnahme der Datenbankzugriffe)? –