我想创建一个简单的井字游戏,在 SAP 系统的用户之间玩。
我有一个带有 SIGNUP 方法的 CL_TTT_MANAGER 类,该方法将玩家分配给游戏。我的类(class)是启用共享内存的类(class),因为它的目的是潜在地被 sap 系统的所有用户访问。
注册过程是使用非常简单的算法完成的。
1:存在“WAITING_FOR_PLAYERS”标志,并设置为 ABAP_FALSE。最初。
2:当第一个玩家调用“SIGNUP”时,标志设置为“ABAP_TRUE”。
3:当第二个玩家调用“SIGNUP”时,标志设置为“ABAP_FALSE”并创建游戏实例。
我的 SIGNUP 方法的问题在于它依赖于状态,即它必须记住第一个玩家的名字,这是使用私有(private)属性来实现的。
对于遇到并发问题的任何人,您都会发现数据竞赛,即如果在第二个玩家注册之后,第三个玩家也注册了,那么第一个玩家的名字可能会被替换为第三。
我如何在abap中同步这些东西?我有什么机制呢?我在文档中没有遇到过这样的事情(我只学习了 2 个月)。我必须自己实现这个,还是有什么可以帮助我的?
最佳答案
这应该不是问题——在第三个玩家能够写入共享内存区域之前,他必须获得一个更改句柄,只要第二个用户仍然有一个更改锁,他就无法获得一个放。 See the docs有关该主题的更多详细信息。
请注意,稳定可靠的共享内存编程是在 ABAP 环境中完成的最困难的任务之一(可能在任何环境中)。我从您的其他问题中知道您对 ABAP 相对较新 - 这么早就开始使用共享对象是雄心勃勃的。
关于synchronization - 共享内存对象同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070701/