我想创建一个简单的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个月)。我是否必须自己实施,或者有什么可以帮助我吗?
答案 0 :(得分:3)
这应该不是问题 - 在第三个玩家能够写入共享内存区域之前,他必须获得一个更改句柄,只要第二个用户仍然拥有,他将无法获得一个更改句柄更改锁定设置。 See the docs了解有关该主题的更多详细信息。
请注意,稳定可靠的共享内存编程是ABAP环境中最难完成的任务之一(可能在任何环境中)。我从你的其他问题中得知你对ABAP相对较新 - 它很早就开始使用共享对象。