ABAP:共享内存对象同步

时间:2012-08-22 10:00:55

标签: synchronization sap shared-memory abap

我想创建一个简单的Tic Tac Toe游戏,在SAP系统的用户之间进行游戏。

我有一个带有SIGNUP方法的CL_TTT_MANAGER类,可以将玩家分配给游戏。我的类是一个支持共享内存的类,因为它的目的是可能被sap系统的所有用户访问。

注册程序使用非常简单的算法完成。

1:存在“WAITING_FOR_PLAYERS”标志,并设置为ABAP_FALSE。原来。 2:当第一个玩家调用“SIGNUP”时,该标志设置为“ABAP_TRUE”。 3:当第二个玩家调用“SIGNUP”时,该标志设置为“ABAP_FALSE”并创建游戏实例。

我的SIGNUP方法的问题在于它依赖于状态,即它必须记住第一个玩家的名字,这是使用私有属性实现的。

对于任何处理过并发问题的人,你会发现数据竞争,即如果在第二个玩家注册后,第三个玩家也注册,第一个玩家的名字可能被替换为第三个名字。

我如何快速同步这些东西?我有什么机制呢?我在文档中没有遇到过这样的事情(我已经研究了2个月)。我是否必须自己实施,或者有什么可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

这应该不是问题 - 在第三个玩家能够写入共享内存区域之前,他必须获得一个更改句柄,只要第二个用户仍然拥有,他将无法获得一个更改句柄更改锁定设置。 See the docs了解有关该主题的更多详细信息。

请注意,稳定可靠的共享内存编程是ABAP环境中最难完成的任务之一(可能在任何环境中)。我从你的其他问题中得知你对ABAP相对较新 - 它很早就开始使用共享对象。