프로세스간에 하나의 변수를 공유해야할때 어떤 방법이 가장 좋은가요?

superkkt의 이미지

클라이언트 접속시 fork하는 구조로 이루어져있습니다. 이 상태에서 메인 프로세스와 자식 프로세스들 간에 하나의 변수(현재 클라이언트의 개수를 저장하는 변수)를 공유해야 합니다.

IPC에 관해서 책을 뒤져봤는데 공유메모리를 사용하는 방법이 있더군요. 그런데 단지 int 변수 한개를 공유하려고하는데 공유메모리는 shmget(), shmctl() 등 좀 복잡한것 같습니다. 이 방법외에 다른 간단한 방법은 없나요?

쓰레드를 사용하면 글로벌변수가 자동으로 공유가 되니까 참 편한던데요... 쩝..

소타의 이미지

파이프, 파일 등을 이용하실 수도 있습니다.
어떤걸 사용하시던지 데이터의 무결성을 위해 동시성 제어를 해주셔야 하는데요.
예를 들어 fork를 3번 해서 총 4개의 프로세스가 있다고 할 때 1번이 데이터의 변경이 생기면 234에서 쏴줘야 하고 2번이 변경이 생기면 134에게 쏴줘야 합니다. 이렇게 데이터의 변경에 대한 알림이 동시에 일어난다면 문제가 생기는데요. 이런것들을 해결하기 위해서는 공유 메모리 관련 함수를 사용하는 것보다 훨씬 복잡한 과정을 거쳐야 합니다.
파일을 쓰시면 파일에 락을 걸고 변경된 점을 쓰고 락을 풀고 라던지 공유 메모리와 하는 짓은 비슷합니다.
공유 메모리.. 괜찮고 나름대로 간단한 방법입니다~
쓰레드 환경에서라도 변경되는 데이터에 쓰레드간 경쟁이 있기만 하면 뮤텍스로 크리티컬 섹션을 맹거줘야 하는 것과 같은 이치입니다~

superkkt의 이미지

흠.. 생각해보니 다른 IPC 방법들도 복잡하긴 매한가지군요.. 그냥 공유메모리와 세마포어 사용해야겠습니다. 답변 감사합니다~

======================
BLOG : http://superkkt.com

ㅡ,.ㅡ;;의 이미지

위에 원하는 기능만이라면.. 세마포어 하나로됩니다.
프로세스가 불의의 사고로 죽는경우가 있기에..
공유메모리보다.그것이 더정확할겁니다.


----------------------------------------------------------------------------

sangwoo의 이미지

shared memory나 파일을 mmap() 하셔서 쓰시는 걸 추천합니다. 둘다 비슷하긴 하군요 :-)

----
Let's shut up and code.

----
Let's shut up and code.

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.