프로그래밍

 3198, 1/160 회원가입  로그인  
   attainer
   [php]php에서도 레이스컨디션 상태가 일어날 수 있나요?

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3218 [복사]


심심풀이로 어떤 perl로 짜여있는 웹게임을 php로 변환하는 작업을 하고 있는데요.
하는김에 DB연동을 시키다가 문득 궁금한 점이 생겨서 질문드립니다.

유저 A랑 유저 B가 있는데 이 둘이 전투를 한다고 생각합시다.

유저 A는 유저 B를 공격! 버튼을 누르면,

1.DB에서 유저 A의 정보와 유저 B의 정보를 가져 온 후
2.각종 공격력 방어력 특수능력등을 계산하고
3.그 결과에 따라서 유저 A와 유저 B의 정보를 업데이트합니다.

그리고 유저 B가 유저 A에게 공격! 버튼을 누르는 것 또한 같은 동작을 하겠지요.

그런데 만약 유저 A가
2번의 각종 공격력 방어력 등의 특수능력을 계산하고 있는 도중에,
유저 B가 공격 버튼을 눌려서 1번의, DB에서 유저 정보를 가져오는 동작을 한다면.
그 다음 유저 A가 3번 동작인, 결과에 따른 정보 업데이트를 하여도
유저 B는 그 업데이트된 정보를 참조하지 않고 그 이전의 정보를 가져온 후 업데이트해버리므로
A의 동작이 무시될 수 있지 않을까요?

유저 A:동작 2
유저 B:동작 1
유저 A:동작 3
유저 B:동작 2, 3

만약 그러하다면 이를 막으려면 어떻게 해야될까요?

  Hit : 4117     Date : 2011/11/23 01:02



    
kjwon15 DB에서 락을 걸면 되는걸로 알고 있습니다. 2011/11/23  
attainer 아.. 파일에만 락이 있는줄 알았는데 DB 자체에도 락이 가능하군요. 처음알았습니다.
답변 감사합니다.
2011/11/24