synchronization - 共享内存对象同步

标签 synchronization shared-memory abap

我想创建一个简单的井字游戏,在 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/

相关文章:

button - 如何跳过选择屏幕上的必填字段?

python - 如何在Python中保持文件夹与Azure存储帐户同步?

python - 使用 Python 的 multiprocessing.pool.map 操作同一个整数

子进程无法写入共享内存(fifo - c 中的链表)

std::strings 队列通过 JNI 需要 C++ 共享内存吗?

abap - 读取当前 LUW 中的原始(更改前)DB 值?

ios - 使用Core Data和Ensembles(iCloud)删除几乎重复的副本

javascript - DOM 重绘被 childProcess.spawnSync 阻止

macos - 如何在多台 Mac 上同步您的 MAMP 安装

abap - 是否有相当于事务CKMM的BAPI?