2012-08-22 6 views
5

SAPシステムのユーザー間で再生する簡単なTic Tac Toeゲームを作成します。ABAP:共有メモリオブジェクトの同期化

私はプレイヤーにゲームを割り当てるSIGNUPメソッドを持つCL_TTT_MANAGERクラスを持っています。私のクラスは共有メモリー対応のクラスです.SAPシステムのすべてのユーザーが潜在的にアクセスできるようにするためです。

サインアップ手順は、非常に単純なアルゴリズムを使用して行われます。

1: "WAITING_FOR_PLAYERS"フラグが存在し、ABAP_FALSEに設定されています。最初は 2:最初のプレーヤーが "SIGNUP"を呼び出すと、フラグは "ABAP_TRUE"に設定されます。 3:セカンドプレーヤーが "SIGNUP"を呼び出すと、フラグは "ABAP_FALSE"に設定され、ゲームインスタンスが作成されます。

私のSIGNUPメソッドの問題は、状態に依存していることです。つまり、最初のプレーヤーの名前を覚えておく必要があります。これは、プライベート属性を使用して実現されます。

並行性の問題を抱えている方は、データレースを見つけることができます。つまり、2人目のプレイヤーがサインアップした直後に3人目もサインアップすると、最初のプレーヤーの名前が三番目の名前。

どのように私はこれらのものをabapで同期させるのですか?これに対してどのようなメカニズムがありますか?私はドキュメンテーション(これは2ヶ月間しか勉強していませんでした)でこのようなことに遭遇していません。私はこれを自分で実装しなければならないのですか、それとも私を助ける何かがありますか?

+0

よくSAPは(Oracleのような)会社であり、ABAPは独自の言語(Javaのようなもの)です....しかし、システムのプログラミングにのみ使用されます。情報とアドバイスのために –

答えて

3

これは問題ではありません.3人目のプレーヤーが共有メモリ領域に書き込む前に、変更ハンドルを取得する必要があります.2人目のユーザーがまだ変更ハンドルを取得する必要があります変更ロックが設定されています。そのトピックの詳細については、See the docsを参照してください。

安定した信頼性の高い共有メモリプログラミングは、ABAP環境(おそらくどの環境でも)で達成するのが最も難しいタスクの1つです。私はあなたの他の質問から、あなたがABAPには比較的新しいことを知っています。それは早くから共有オブジェクトで始めることが大切です。

+0

Thx。私は現在私自身のトレーニングのためにキンナを担当しているので、コーディングの冒険中にABAPの鉱山のフィールドに入るときはいつもわからないかもしれません:)。 –

+0

これは一つです、私を信じてください。これは、セントラルインスタンスのみの開発およびテストシステムを通過させ、複数のアプリケーションサーバーを使用して生産環境を爆破するような選択的な鉱山の分野です。 – vwegert

+0

警告のためにうまくいっています。危険を聞いたことがないので、私は目を離しません。 2つの別個のユーザーの2つのインスタンス間の通信が他の方法で(データベースへのアクセスを除いて)どのように起こる可能性があるかについて、何か提案がありますか? –

関連する問題