쉐어드 메모리 Init 타이밍 문제

sabihanl의 이미지

현재 프로세스 A, B, C가 하나의 쉐어드 메모리를 공유해서 데이터를 공유 합니다.

문제는 프로세스 A,B,C중 어느것이 먼저 뜰지 모르는 상황이라

어느 프로세스가 Shm Create를하고 Shm에 초기 데이터를 파일에서 읽어서 밀어넣어야 할지를 모르겠습니다.

일단 방법이 임의의프로세스가 Create & Init을 하고 다른 프로세스는 Init완료시까지 대기 하는 방법을 생각해봤는데,
문제가 좀 있구요

방법이 꽁수로 몇개가있을것 같긴한데 이런 경우에 좀 나이스한 방법이 없을까요?

ps. 아무것도 아닌것가지고 계속 고민하느라고 아웃풋이 안나오지만 결국 제대로된 방법으로 코딩을 해야할지
어떻게든 돌아가게 짜놓고 나중에 수정하는게 좋을지 잘 모르겠네요 ㅠ _ㅠ

madman93의 이미지

제가 알기로는 일단 구현을 해 놓고 나서 발생되는 문제들에 대해서 해결해 나가는것이 일단 공적인(?) 자세인것 같습니다.
일단 모든것이 잘 된다는 가정하에 구현을 해 놓은 상황에서 예외 처리를 해 나가는것이 좋을 것 같군요
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

mirr187의 이미지

shmget()을 최초 호출시에

shmget(key, size, shmflg) 에서 shmflg의 값을

IPC_CREAT | IPC_EXCL 과 같이 줄 경우 이미 생성되어있는지를 체크하게 됩니다.

만약 생성이 안되어 있다면 생성을 할 것이고, 생성이 되어 있다면 EEXIST 에러를 리턴하게 되죠

if( (shmid = shmget(key, size, IPC_CREAT | IPC_EXCL | 0660)) == -1)
{
        if(errno == EEXIST)
        {
             if( (shmid = shmget(key, size, IPC_EXCL | 0660)) == -1)
             {
             }
        }
}
else
{
 /* init data */
}

와 같은 형식으로 하시면 될 것 같습니다만...

뭐.. 추가적으로 A라는 프로세스가 생성하고 데이터를 넣기 전에 다른 프로세스가 접근하는걸 막고자 한다면, 두번째의 shmget()에서 별도의 처리만 해준다면야 큰 문제는 없을것으로 보입니다.

sohn9086의 이미지

일단 방법이 임의의프로세스가 Create & Init을 하고 다른 프로세스는 Init완료시까지 대기 하는 방법을 생각해봤는데, 문제가 좀 있구요

제가 보기엔 가장 적절한 어프로치로 보이는데 어떤 문제가 있었나요?
--------------
save the earth

생산적인 댓글을 달자

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.