다른 프로세스간의 뮤텍스와 세마포어..

hatbary의 이미지

안녕하세요..

뮤텍스와 세마포어를 보던 중에 궁금한 점이 생겨서 질문 올립니다..

뮤텍스는 같은 프로세스간의 스레드끼리의 동기화..
세마포어는 다른 프로세스간의 동기화..

라고 알고 있는데요...

1. 만약 A란 프로세스의 스레드와 B란 프로세스의 스레드가 같은 변수에 접근한다면, 그리고 이때 뮤텍스를 걸면 동기화가 되나요? 제 생각엔 안될거 같은데..확신이 없어서..

2. 만약 A란 프로세스와 B란 프로세스가 세마포어를 걸었는데, 각각 프로세스의 스레드가 같은 변수에 접근한다면, 동기화가 가능할까요? 요건 가능할거 같은데...^^a, 만약 그렇다면, 같은 프로세스 내에 있는 스레드간의 동기화는 보장해 줄수 있나요?

3. 결국 알고 싶은건 이겁니다..다른 프로세스의 스레드와 같은 프로세스내의 스레드간의 동기화(그니깐, A프로세스의 스레드랑 B프로세스의 스레드가 같은 변수에 접근하고, 마찬가지로 A나 B프로세스에 생성된 스레드가 같은 변수에 접근한다)를 하려면 세마포어랑 뮤텍스를 같이 써야 하나요?

4. 하나만 더 물어볼깨요..함수에도 뮤텍스나 세마포어 걸수 있나요? 책보면 다 변수에만 거는게 나와서..^^;;,,,,다른 프로세스간의 스레드와 같은 프로세스간의 스레드가 같은 클래스의 멤버 함수를 사용하는데, 요놈을 한번에 한놈씩만 사용하도록 하면 좋겠다는 생각이 들어서요..^^;;

질문이 약간 헷갈릴수도 있겠네요...나름대로 또 읽어보구 해서 올리는데..ㅡㅡ;

암튼 답변 주시면 고맙겠슴다..여기서 정말 도움을 많이 받는거 같네요..^^

그럼 답변에 미리 감사드리면서..꾸벅

girneter의 이미지

답변은 아닙니다만,

뮤텍스와 세마포어는
동일 프로세스이냐 다른 프로세스이냐의
차이가 아닙니다.

그 차이에 대해서는 다음을 참조하셔요.

http://linux-sarang.net/board/?p=read&table=tip&no=9568&page=&o[at]=s&o[sc]=n&o[ss]=%B9%D9%B4%D9&o[st]=a

개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?

bw001730의 이미지

1. 만약 A란 프로세스의 스레드와 B란 프로세스의 스레드가 같은 변수에 접근한다면, 그리고 이때 뮤텍스를 걸면 동기화가 되나요? 제 생각엔 안될거 같은데..확신이 없어서.. 

주는 옵션은 있습니다만.. 리눅스에서는 현재 프로세스간 스레드뮤텍스
기능이 지원되지 않고,, 솔라리스같은 곳에서는 잘됩니다.
pthread 라이브러리상에서 뮤텍스를 프로세스간 공유할 수 있는
옵션을 제공합니다. 프로세스간 공유하려면 뮤텍스 변수가 공유메모리
같은데 있어서 두 프로세스가 동일한 뮤텍스(락객체)에 접근 가능해야할 것입니다.
2. 만약 A란 프로세스와 B란 프로세스가 세마포어를 걸었는데, 각각 프로세스의 스레드가 같은 변수에 접근한다면, 동기화가 가능할까요? 요건 가능할거 같은데...^^a, 만약 그렇다면, 같은 프로세스 내에 있는 스레드간의 동기화는 보장해 줄수 있나요? 
질문이 약간 잘못된듯..
님께서 세마포라고 하신것은 SystemV의 세마포를 뜻하는 것 같습니다
세마포는 그세마포만 있지 않거든요
스레드간(프로세스가 아닌)의 동기화를 위해서 사용할 수 있는 세마포도 있거든요
SystemV 세마포는 조금 사용하기 어려울지도 모르겠습니다.
꽤 복잡하거든요.

아직 프로그램을 하지 않으신 분들에게 개념을 말씀드린다면
뮤텍스의 개념은 한번에 한놈만 접근하도록하는 것이고
세마포의 개념은 한번에 몇놈을 접근하게 할것인가 하는 것으로
정리할수 잇을것 같습니다.
만약 세마포가 한번에 한놈만 접근하도록 한다면 이것은 뮤텍스와 동일하겠죠

3. 결국 알고 싶은건 이겁니다..다른 프로세스의 스레드와 같은 프로세스내의 스레드간의 동기화(그니깐, A프로세스의 스레드랑 B프로세스의 스레드가 같은 변수에 접근하고, 마찬가지로 A나 B프로세스에 생성된 스레드가 같은 변수에 접근한다)를 하려면 세마포어랑 뮤텍스를 같이 써야 하나요? 

세마포만 써도 됩니다.

4. 하나만 더 물어볼깨요..함수에도 뮤텍스나 세마포어 걸수 있나요? 책보면 다 변수에만 거는게 나와서..^^;;,,,,다른 프로세스간의 스레드와 같은 프로세스간의 스레드가 같은 클래스의 멤버 함수를 사용하는데, 요놈을 한번에 한놈씩만 사용하도록 하면 좋겠다는 생각이 들어서요..^^;; 

자바의 synchronized 메소드를 말씀하시는 건지..
pthread_mutex_lock()
// 여기에는 변수가 오든 함수가 오든 상관없음
pthread_mutex_unlock()
hatbary의 이미지

오~~스바라시한...답변들..

너무도 명쾌하게 해소 됐슴다..여태까지 세마포어와 뮤텍스를 잘못 알고 있었던듯..

흠..역시 혼자 공부하니깐...이런 맹점이 있네요..
내맘대로 해석하기!!ㅋㅋㅋ

암튼 답변 고맙슴다..^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.