2012-08-22 15 views
5

Quiero crear un juego simple de Tic Tac Toe, para jugar entre los usuarios de un sistema SAP.ABAP: sincronización de objetos de memoria compartida

Tengo una clase CL_TTT_MANAGER con un método SIGNUP que asigna jugadores a un juego. Mi clase es una habilitada para memoria compartida, ya que su objetivo es que todos los usuarios de un sistema de savia puedan acceder a él.

El procedimiento de registro se realiza utilizando un algoritmo muy simple.

1: Existe un indicador "WAITING_FOR_PLAYERS" y se establece en ABAP_FALSE. inicialmente. 2: Cuando un primer jugador llama "SIGNUP", la bandera se establece en "ABAP_TRUE". 3: Cuando un segundo jugador llama "SIGNUP", la bandera se establece en "ABAP_FALSE" y se crea la instancia del juego.

El problema con mi método SIGNUP es que depende del estado, es decir, tiene que recordar el nombre del primer jugador, y esto se logra con un atributo privado.

Para cualquiera de ustedes que haya trabajado con problemas de simultaneidad, detectará una carrera de datos, es decir, que justo después de que el segundo jugador se inscriba, un tercero también se inscriba, el nombre del primer jugador podría ser reemplazado por el nombre del tercero.

¿Cómo sincronizo estas cosas en abap? ¿Qué mecanismo tengo para esto? No he encontrado nada como esto en la documentación (he estado estudiando solo durante 2 meses). ¿Debo implementar esto yo mismo, o hay algo para ayudarme?

+0

bien SAP es una empresa (como Oracle) y ABAP es su lenguaje propietario (como Java) .... pero se usa solo para programar sus sistemas. –

Respuesta

3

Esto no debería ser un problema: antes de que el tercer jugador pueda escribir en el área de memoria compartida, tiene que obtener un identificador de cambio, y no podrá obtener uno mientras el segundo usuario esté todavía tiene un conjunto de bloqueo de cambio. See the docs para obtener información más detallada sobre ese tema.

Tenga en cuenta que la programación estable y confiable de la memoria compartida es una de las tareas más difíciles de realizar en un entorno ABAP (probablemente en cualquier entorno). Sé por tus otras preguntas que eres relativamente nuevo en ABAP: es ambicioso comenzar con objetos compartidos tan temprano.

+0

Thx por la información y el consejo. Actualmente soy el responsable de mi propia formación, por lo que no siempre sabré cuándo pisar un campo de minas de ABAP durante mis aventuras de codificación :). –

+0

Este es uno, confía en mí. Es un campo minero selectivo del tipo que permitirá que los sistemas de desarrollo y prueba solo de instancia central pasen y solo exploten los entornos de producción con múltiples servidores de aplicaciones. – vwegert

+0

Bueno, gracias por la advertencia. No he oído hablar del peligro, así que estaré atento. ¿Tendría alguna sugerencia sobre cómo la comunicación entre 2 instancias de 2 usuarios separados podría ocurrir de otras maneras (a excepción del acceso a la base de datos)? –

Cuestiones relacionadas