쉐어드 메모리 Init 타이밍 문제
글쓴이: sabihanl / 작성시간: 화, 2010/08/17 - 2:30오후
현재 프로세스 A, B, C가 하나의 쉐어드 메모리를 공유해서 데이터를 공유 합니다.
문제는 프로세스 A,B,C중 어느것이 먼저 뜰지 모르는 상황이라
어느 프로세스가 Shm Create를하고 Shm에 초기 데이터를 파일에서 읽어서 밀어넣어야 할지를 모르겠습니다.
일단 방법이 임의의프로세스가 Create & Init을 하고 다른 프로세스는 Init완료시까지 대기 하는 방법을 생각해봤는데,
문제가 좀 있구요
방법이 꽁수로 몇개가있을것 같긴한데 이런 경우에 좀 나이스한 방법이 없을까요?
ps. 아무것도 아닌것가지고 계속 고민하느라고 아웃풋이 안나오지만 결국 제대로된 방법으로 코딩을 해야할지
어떻게든 돌아가게 짜놓고 나중에 수정하는게 좋을지 잘 모르겠네요 ㅠ _ㅠ
Forums:
결국 결과론적으로는 두가지 방법이 하나의 결론으로 도달하는것은 마찬가지 이겠지만
제가 알기로는 일단 구현을 해 놓고 나서 발생되는 문제들에 대해서 해결해 나가는것이 일단 공적인(?) 자세인것 같습니다.
일단 모든것이 잘 된다는 가정하에 구현을 해 놓은 상황에서 예외 처리를 해 나가는것이 좋을 것 같군요
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
shmget()을 최초
shmget()을 최초 호출시에
shmget(key, size, shmflg) 에서 shmflg의 값을
IPC_CREAT | IPC_EXCL 과 같이 줄 경우 이미 생성되어있는지를 체크하게 됩니다.
만약 생성이 안되어 있다면 생성을 할 것이고, 생성이 되어 있다면 EEXIST 에러를 리턴하게 되죠
와 같은 형식으로 하시면 될 것 같습니다만...
뭐.. 추가적으로 A라는 프로세스가 생성하고 데이터를 넣기 전에 다른 프로세스가 접근하는걸 막고자 한다면, 두번째의 shmget()에서 별도의 처리만 해준다면야 큰 문제는 없을것으로 보입니다.
일단 방법이
제가 보기엔 가장 적절한 어프로치로 보이는데 어떤 문제가 있었나요?
--------------
save the earth
생산적인 댓글을 달자
댓글 달기