뮤텍스와 바이너리 세마포의 차이점 :: 2007/07/05 13:18


Windows에는 스레드를 동기화할 수 있는 다양한 커널 객체가 있다. 이벤트, 타이머, 세마포, 뮤텍스가 그것이다. 이중에서 신입 개발자를 가장 헷갈리게 만드는 것은 뮤텍스와 세마포다. 이론적으론 뮤텍스와 바이너리 세마포는 동일한 기능을 하기 때문이다. 서로 다른 스레드가 객체에 동시에 접근할 수 없도록 하는 것이 주된 기능이다. 하지만 늘 이론은 이론이다. 실제 Windows에 구현된 이 두 객체는 조금 다른 특징을 가지고 있다.

이 둘의 가장 큰 차이는 소유권이다. 뮤텍스의 경우 커널 객체중 유일하게 소유권 개념을 가지고 있다. 다른 모든 커널 객체는 소유권 개념이 없다. 소유권이란 해당 커널 객체가 자신을 소유하고 있는 스레드 정보를 저장하고 있는 것이다. 동기화 객체의 경우 소유한다는 의미는 WaitForSingleObject를 통해서 진입에 성공했다는 것이다. 해당 함수를 통해서 뮤텍스나, 세마포를 소유한 경우 ReleaseMutex나 ReleaseSemaphore를 호출하기 전까지는 해당 스레드가 객체를 소유하고 있는 것이다.

간단한 상황을 한번 생각해 보자. A, B 두 개의 스레드가 있고, 동기화를 위해 뮤텍스나 세마포를 사용해야 하는 상황이다. A 스레드가 WaitForSingleObject를 통해서 먼저 객체를 소유했다고 가정해 보자. 그렇다면 이 상황에서 B 스레드가 ReleaseMutex나 ReleaseSemaphore를 통해서 소유된 해당 객체를 해제하려는 시도를 하면 어떻게 될까? 여기서 뮤텍스와 세마포의 차이가 나타난다. 뮤텍스의 경우는 소유권을 저장하고 있기 때문에 FALSE를 리턴한다. 그리고 GetLastError값으로 해당 커널 오브젝트의 소유권을 ReleaseMutex를 호출한 스레드가 가지고 있지 않다는 것으로 설정한다(ERROR_NOT_OWNER). 반면 세마포는 합법적으로 해당 요구를 처리한다.

소유권은 위와 같은 보안상의 장점을 가지고 있지만 해제되지 않은 뮤텍스의 소유권과 관련된 새로운 문제를 야기 시킨다. 한 스레드가 뮤텍스를 소유한 다음 해당 뮤텍스를 해제하지 않은 상태에서 종료한 경우에 뮤텍스의 소유권을 어떻게 처리해야 할까? 개념적으론 다른 모든 스레드는 소유권이 없기 때문에 해당 뮤텍스를 획득할 수도 해제할 수도 없다. 즉, 해당 객체를 대기하고 있는 모든 스레드가 데드락 상황에 빠지는 것이다. 하지만 Windows는 이렇게 심각한 문제가 발생하도록 방치하진 않는다. 모든 커널 오브젝트를 직접 관리하기 때문에 해제되지 않은 뮤텍스가 있는지 검사해서 있다면 해당 뮤텍스를 해제한 다음 다른 스레드로 제어권을 넘겨준다. 이 경우에 뮤텍스의 소유권이 커널에 의해 강제적으로 이동된 것이기 때문에 그것을 알리기 위해서 WaitForSingleObject는 WAIT_OBJECT_0을 리턴 하지 않고 WAIT_ABANDONED를 리턴 한다. 반면 세마포의 경우 소유권 개념이 없기 때문에 이러한 문제가 발생하지 않는다.

소유권 문제의 경우 커널이 직접 제어해주기 때문에 일견 문제가 없는 것처럼 보이기도 한다. 하지만 이러한 처리가 즉시 일어나지 않는다는 점이 중요하다. 실제로 후킹 프로그램등에서 뮤텍스를 통해서 동기화를 하고 프로세스를 강제로 종료시켜 해당 뮤텍스가 해제되지 않은 상황에서 종료되도록 만든 경우를 살펴보면 문제의 심각성을 알 수 있다. 이 상황이 되면 시스템에 따라서 몇 분에서 어떤 경우에는 재부팅을 하기 전까지 해당 뮤텍스를 그 누구도 획득하지 못하는 일이 발생한다.

그렇다면 어떤 경우에 뮤텍스를 사용하는 것이 좋을까? 필자의 경우는 객체를 소유하는 시간과 객체의 사용 범위를 기준으로 결정한다. 객체를 소유하는 시간이 짧고, 객체의 사용 범위가 좁을수록 위에서 언급한 소유권 문제가 발생할 확률이 낮아지기 때문이다. 반면 객체를 소유하는 시간이 길고(사용자의 입력이 있을 때까지 대기하는 경우), 사용 범위가 넓은(여러 프로세스에서 공유되어 사용되는 경우) 경우에는 소유권 문제는 늘 발생할 수 있음을 명심해야 한다.

스폰서
글타래

  • 2주간 인기 글
  • 2주간 인기글이 없습니다.
Trackback Address :: http://jiniya.net/tt/trackback/527
  • Gravatar Image.
    earthian | 2007/09/19 13:55 | PERMALINK | EDIT/DEL | REPLY

    mutex와 binary semaphore는 기본적인 특성은 동일합니다.
    (윈도우에서는 모르겠지만, )uC/OS-II라던지 VxWorks와 같은 OS에서 말하는 mutex는 binary semaphore와 다른 결정적인 차이점이 있습니다.

    그것은 Priority Inversion에 대한 대책으로서 Priority Inheritence 기능을 갖고 있다는 것이죠.

    또한, binary semaphore는 동기화를 위해서 사용될 수 있지만 mutex는 take한 task에서만 give할 수 있다는 점에서 공유 자원 보호를 위해서만 사용됩니다.
    물론 binary semaphore도 공유 자원 보호를 위해 사용되지만 위에서 말한 Priority Inversion에 대한 대책은 없죠.

  • Gravatar Image.
    vice | 2009/12/16 09:21 | PERMALINK | EDIT/DEL | REPLY

    잘 보구 갑니다. ^^
    이해가 쉽게 잘 쓰셨네요. 감사합니다!

  • Gravatar Image.
    epicwin | 2020/07/25 23:48 | PERMALINK | EDIT/DEL | REPLY

    I really appreciate this wonderful post that you have provided for us. I assure this would be beneficial for most of the people.

  • Gravatar Image.
    Retour affectif | 2020/07/30 16:26 | PERMALINK | EDIT/DEL | REPLY

    Thanks for a wonderful share. Your article has proved your hard work and experience you have got in this field. Brilliant .i love it reading.

  • Gravatar Image.
    pgslot | 2020/07/30 17:21 | PERMALINK | EDIT/DEL | REPLY

    I have read your article. it is very informative and helpful for me.I admire the valuable information you offer in your articles. Thanks for posting it..

  • Gravatar Image.
    Acupuncture | 2020/08/09 18:26 | PERMALINK | EDIT/DEL | REPLY

    I’ve read some good stuff here. Definitely worth bookmarking for revisiting. I surprise how much effort you put to create such a great informative website.

  • Gravatar Image.
    israeli tv | 2020/08/10 04:45 | PERMALINK | EDIT/DEL | REPLY

    Awesome article! I want people to know just how good this information is in your article. It’s interesting. compelling content. Your views are much like my own concerning this subject.

  • Gravatar Image.
    cooking classes | 2020/08/16 14:30 | PERMALINK | EDIT/DEL | REPLY

    It is imperative that we read blog post very carefully. I am already done it and find that this post is really amazing.

  • Gravatar Image.
    prolution asia | 2020/08/29 16:06 | PERMALINK | EDIT/DEL | REPLY

    I high appreciate this post. It’s hard to find the good from the bad sometimes. but I think you’ve nailed it! would you mind updating your blog with more information?

  • Gravatar Image.
    meditationcraft | 2020/08/29 17:26 | PERMALINK | EDIT/DEL | REPLY

    Positive site. where did u come up with the information on this posting? I'm pleased I discovered it though. ill be checking back soon to find out what additional posts you include.

  • I was surfing net and fortunately came across this site and found very interesting stuff here. Its really fun to read. I enjoyed a lot. Thanks for sharing this wonderful information.

  • Gravatar Image.
    land clearing | 2020/10/03 17:06 | PERMALINK | EDIT/DEL | REPLY

    Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me.

  • Gravatar Image.
    vy tea | 2020/10/04 20:15 | PERMALINK | EDIT/DEL | REPLY

    Interesting topic for a blog. I have been searching the Internet for fun and came upon your website. Fabulous post. Thanks a ton for sharing your knowledge! It is great to see that some people still put in an effort into managing their websites. I'll be sure to check back again real soon.

  • I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.

  • This article gives the light in which we can observe the reality. This is very nice one and gives indepth information. Thanks for this nice article.

  • Gravatar Image.
    loyalfoodmachine | 2020/10/15 23:57 | PERMALINK | EDIT/DEL | REPLY

    Thanks so much for this information. I have to let you know I concur on several of the points you make here and others may require some further review. but I can see your viewpoint.

  • Gravatar Image.
    drone video services | 2020/10/18 17:08 | PERMALINK | EDIT/DEL | REPLY

    Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..

  • Gravatar Image.
    Retro spellen kopen | 2020/10/19 22:20 | PERMALINK | EDIT/DEL | REPLY

    Great write-up, I am a big believer in commenting on blogs to inform the blog writers know that they’ve added something worthwhile to the world wide web!..

  • I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.

  • Gravatar Image.
    yomimoka | 2020/10/25 15:24 | PERMALINK | EDIT/DEL | REPLY

    I really appreciate the kind of topics you post here. Thanks for sharing us a great information that is actually helpful. Good day!

  • Gravatar Image.
    dispatch center | 2020/11/06 15:11 | PERMALINK | EDIT/DEL | REPLY

    I really appreciate this wonderful post that you have provided for us. I assure this would be beneficial for most of the people.

  • Gravatar Image.
    Ion Casino | 2020/11/11 21:27 | PERMALINK | EDIT/DEL | REPLY

    I am very happy to discover your post as it will become on top in my collection of favorite blogs to visit.

  • Gravatar Image.
    Church in Chesapeake | 2020/11/14 23:09 | PERMALINK | EDIT/DEL | REPLY

    I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business.

  • I think this is an informative post and it is very useful and knowledgeable. therefore. I would like to thank you for the efforts you have made in writing this article.

  • Gravatar Image.
    replikhorloges | 2020/11/17 22:56 | PERMALINK | EDIT/DEL | REPLY

    Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.

  • Gravatar Image.
    finance | 2020/11/21 17:01 | PERMALINK | EDIT/DEL | REPLY

    Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.

  • Gravatar Image.
    live positively | 2020/11/21 18:20 | PERMALINK | EDIT/DEL | REPLY

    It was wondering if I could use this write-up on my other website. I will link it back to your website though.Great Thanks.

  • Gravatar Image.
    gaming news | 2020/11/22 18:05 | PERMALINK | EDIT/DEL | REPLY

    This is a great post. I like this topic.This site has lots of advantage.I found many interesting things from this site. It helps me in many ways.Thanks for posting this again.

  • Gravatar Image.
    domain for sale | 2020/11/22 21:07 | PERMALINK | EDIT/DEL | REPLY

    Thanks for sharing this quality information with us. I really enjoyed reading. Will surely going to share this URL with my friends.

  • All the contents you mentioned in post is too good and can be very useful. I will keep it in mind. thanks for sharing the information keep updating. looking forward for more posts.Thanks

  • Gravatar Image.
    hanky code | 2020/11/23 12:29 | PERMALINK | EDIT/DEL | REPLY

    Hello. I have browsed most of your posts. This post is probably where I got the most useful information for my research. Thanks for posting. maybe we can see more on this. Are you aware of any other websites on this subject.

Name
Password
Homepage
Secret