프로세스간에 하나의 변수를 공유해야할때 어떤 방법이 가장 좋은가요?
글쓴이: superkkt / 작성시간: 화, 2006/03/14 - 8:51오후
클라이언트 접속시 fork하는 구조로 이루어져있습니다. 이 상태에서 메인 프로세스와 자식 프로세스들 간에 하나의 변수(현재 클라이언트의 개수를 저장하는 변수)를 공유해야 합니다.
IPC에 관해서 책을 뒤져봤는데 공유메모리를 사용하는 방법이 있더군요. 그런데 단지 int 변수 한개를 공유하려고하는데 공유메모리는 shmget(), shmctl() 등 좀 복잡한것 같습니다. 이 방법외에 다른 간단한 방법은 없나요?
쓰레드를 사용하면 글로벌변수가 자동으로 공유가 되니까 참 편한던데요... 쩝..
Forums:
파이프, 파일 등을
파이프, 파일 등을 이용하실 수도 있습니다.
어떤걸 사용하시던지 데이터의 무결성을 위해 동시성 제어를 해주셔야 하는데요.
예를 들어 fork를 3번 해서 총 4개의 프로세스가 있다고 할 때 1번이 데이터의 변경이 생기면 234에서 쏴줘야 하고 2번이 변경이 생기면 134에게 쏴줘야 합니다. 이렇게 데이터의 변경에 대한 알림이 동시에 일어난다면 문제가 생기는데요. 이런것들을 해결하기 위해서는 공유 메모리 관련 함수를 사용하는 것보다 훨씬 복잡한 과정을 거쳐야 합니다.
파일을 쓰시면 파일에 락을 걸고 변경된 점을 쓰고 락을 풀고 라던지 공유 메모리와 하는 짓은 비슷합니다.
공유 메모리.. 괜찮고 나름대로 간단한 방법입니다~
쓰레드 환경에서라도 변경되는 데이터에 쓰레드간 경쟁이 있기만 하면 뮤텍스로 크리티컬 섹션을 맹거줘야 하는 것과 같은 이치입니다~
흠.. 생각해보니 다른
흠.. 생각해보니 다른 IPC 방법들도 복잡하긴 매한가지군요.. 그냥 공유메모리와 세마포어 사용해야겠습니다. 답변 감사합니다~
======================
BLOG : http://superkkt.com
위에 원하는
위에 원하는 기능만이라면.. 세마포어 하나로됩니다.
프로세스가 불의의 사고로 죽는경우가 있기에..
공유메모리보다.그것이 더정확할겁니다.
----------------------------------------------------------------------------
shared memory나 파일을
shared memory나 파일을 mmap() 하셔서 쓰시는 걸 추천합니다. 둘다 비슷하긴 하군요 :-)
----
Let's shut up and code.
----
Let's shut up and code.
댓글 달기