2012-08-22 3 views
5

SAP 시스템 사용자간에 재생할 간단한 Tic Tac Toe 게임을 만들고 싶습니다.ABAP : 공유 메모리 객체 동기화

플레이어에 게임을 할당하는 SIGNUP 메서드가있는 CL_TTT_MANAGER 클래스가 있습니다. 내 수업은 수액 시스템의 모든 사용자가 잠재적으로 액세스 할 수 있기 때문에 공유 메모리 사용 가능 수업입니다.

가입 절차는 매우 간단한 알고리즘을 사용하여 수행됩니다.

1 : "WAITING_FOR_PLAYERS"플래그가 있으며 ABAP_FALSE로 설정됩니다. 처음에는 2 : 첫 번째 플레이어가 "SIGNUP"을 호출하면 플래그가 "ABAP_TRUE"로 설정됩니다. 3 : 두 번째 플레이어가 "SIGNUP"을 호출하면 플래그가 "ABAP_FALSE"로 설정되고 게임 인스턴스가 생성됩니다.

내 SIGNUP 방법의 문제점은 상태에 의존한다는 것입니다. 즉, 첫 번째 플레이어의 이름을 기억해야하며 개인 속성을 사용하여 달성됩니다.

동시성 문제로 작업 한 사람이라면 데이터 경쟁이 발생합니다. 즉, 두 번째 플레이어가 등록한 직후에 세 번째 플레이어가 등록하면 첫 번째 플레이어의 이름이 세 번째 이름.

어떻게하면 이런 것들을 서로 동기화합니까? 이 메커니즘에는 어떤 메커니즘이 있습니까? 나는이 문서 (나는 단지 2 개월 동안 공부하고있어)에서 이와 같은 것을 발견하지 못했다. 이 프로그램을 직접 구현해야합니까, 아니면 저에게 도움이 될만한 프로그램이 있습니까?

+0

잘 SAP는 오라클과 같은 회사이며 ABAP은 독점적 인 언어입니다 (Java와 유사 함) .... 그러나 시스템 프로그래밍에만 사용됩니다. 정보 및 조언을 위해 –

답변

3

세 번째 플레이어가 공유 메모리 영역에 쓸 수 있기 전에 변경 핸들을 얻어야하며 두 번째 사용자가 여전히 변경된 핸들을 가져야합니다. 변경 잠금 세트가 있습니다. 해당 주제에 대한 자세한 내용은 See the docs을 참조하십시오.

안정적이고 안정적인 공유 메모리 프로그래밍은 ABAP 환경 (아마도 모든 환경에서)에서 수행하기 가장 어려운 작업 중 하나임을 알고 있어야합니다. 저는 다른 질문에서 당신이 ABAP에 대해 상대적으로 새로운 것을 압니다. 일찍이 공유 된 객체로 시작하는 것이 야심적입니다.

+0

Thx. 저는 현재 자신의 훈련에 대한 kinna를 담당하고 있으므로, 모험을하는 동안 ABAP 광산 필드에 언제 들어 왔는지 항상 알지 못할 수도 있습니다. :) –

+0

이것은 하나, 나를 믿어. 이는 중앙 인스턴스 전용 개발 및 테스트 시스템을 통과시키고 여러 애플리케이션 서버로 생산 환경을 날려 버릴 수있는 종류의 선택적인 광산 분야입니다. – vwegert

+0

경고 메시지가 표시됩니다. 위험에 대해 들어 본 적이 없으므로 나는 눈을 떼지 않을 것이다. 2 명의 개별 사용자의 2 인스턴스 간의 통신이 다른 방식으로 발생할 수있는 방법에 대한 제안 사항이 있습니까 (데이터베이스 액세스 제외)? –