ABAP:共享内存对象同步

vla*_*ean 5 sap abap synchronization shared-memory

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

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

注册过程使用非常简单的算法完成.

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

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

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

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

vwe*_*ert 3

这应该不是问题 - 在第三个玩家能够写入共享内存区域之前,他必须获得更改句柄,并且只要第二个用户仍然拥有更改锁,他就无法获得更改句柄放。有关该主题的更多详细信息,请参阅文档。

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