2012-08-22 105 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个实例之间的通信如何以其他方式进行通信(除了数据库访问)吗? –