2012-08-22 135 views
5

我想創建一個簡單的Tic Tac Toe遊戲,在SAP系統的用戶之間播放。ABAP:共享內存對象同步

我有一個CL_TTT_MANAGER類,它有一個SIGNUP方法來分配玩家到遊戲中。我的課是一個啓用共享內存的類,因爲它的目的是可能被sap系統的所有用戶訪問。

註冊過程使用非常簡單的算法完成。

1:存在「WAITING_FOR_PLAYERS」標誌,並且設置爲ABAP_FALSE。原來。 2:當第一個玩家調用「SIGNUP」時,該標誌被設置爲「ABAP_TRUE」。 3:當第二個玩家調用「SIGNUP」時,該標誌被設置爲「ABAP_FALSE」並創建遊戲實例。

我SIGNUP方法的問題是,它依賴於國家,即它必須記住的第一個球員的名字,這是使用私有屬性來實現的。

對於任何處理併發問題的人,你會發現一個數據競賽,即如果在第二位玩家註冊後立即註冊,第三位也註冊,第一位玩家的名字可能被替換爲第三名。

我如何在abap中同步這些東西?我有什麼機制?我在文檔中沒有遇到過這樣的事情(我只學習了2個月)。我必須自己實施這個,還是有什麼可以幫助我的?

+0

well SAP是一家公司(如Oracle),ABAP是他們的專有語言(如Java)......但僅用於編程他們的系統。 –

回答

3

這不應該是一個問題 - 之前的第三個球員能夠寫入共享內存區,他要獲得改變把手,他將無法得到一個只要第二用戶仍有一個更改鎖定。 See the docs瞭解有關該主題的更多詳細信息。

請注意,穩定可靠的共享內存編程是在ABAP環境(可能在任何環境中)完成的最難的任務之一。我從其他問題中知道,你對ABAP相對來說比較陌生 - 它很早就開始使用共享對象。

+0

Thx的信息和建議。我目前對我自己的訓練負責,所以我可能並不總是知道我在編碼冒險期間何時踏入ABAP雷場。 –

+0

這是一個,相信我。這是一種選擇性的礦井領域,它將讓只有中央實例的開發和測試系統通過,並且只會破壞具有多個應用程序服務器的生產環境。 – vwegert

+0

以及警告。沒有聽說過危險,所以我會密切關注。你會碰巧對2個獨立用戶的2個實例之間的通信如何以其他方式進行通信(除了數據庫訪問)嗎? –