뮤텍스랑 바이너리 세마포어랑... Study+more

이색퀴들이 뭐가 다른지 알아보려고 적으려다가 결판을 못낸...

이놈의 뮤텍스와 세마포어는 뭐가 다른가!

lkd> dt _KMUTANT
nt!_KMUTANT
   +0x000 Header           : _DISPATCHER_HEADER
   +0x010 MutantListEntry  : _LIST_ENTRY
   +0x018 OwnerThread      : Ptr32 _KTHREAD
   +0x01c Abandoned        : UChar
   +0x01d ApcDisable       : UChar


lkd> dt _KSEMAPHORE
nt!_KSEMAPHORE
   +0x000 Header           : _DISPATCHER_HEADER
   +0x010 Limit            : Int4B


이런 차이가 있는건데, 뮤텍스 부터 설명을 하자면

뮤텍스를 소유한 놈(쓰레드)가 다시 쓰레드를 얻었다. 그래도 된다.(?!)
OwnerThread가 뮤텍스를 소유한 쓰레드를 가리키고 있다. 따라서, 뮤텍스는 자기 주인(!!)이 누군지 안다는 말이다.

뮤텍스를 소유한 놈(쓰레드)가 죽었다(!)... 뮤텍스도 해제 안하고(!!). 그래도 된다(!!!)
뮤텍스는 자기 주인이 누군지 안다. 근데... 어? 주인이 없네? 허걱! 주인이 죽었어-0-!! 이렇게 알게 되는거다. 이러면 Abandon이 발생하는거다.
근데 Abandon이 발생하는거랑 Abandoned가 어떤 관계가 있으려나 )_(?

또, 뮤텍스는 APC도 막는다. 헐-0-...
ApcDisable이라는 변수가 있는거 봐라.. 쯧쯧..
근데, APC를 막는거랑 ApcDisable이랑 무슨 상관?

설마, 이것들... UCHAR을 달랑 Boolean(TRUE/FALSE)로 쓰는거 아냐-.-?

덧글

  • WERT 2008/01/14 17:37 # 답글

    뮤텍스는 주인이 하나뿐이지만 세마포어는 주인을 여러개 둘 수 있는 것 아닌가요? 음.. 어려운 단어들이 많아서 잘 모르겠네요. -,.-;
  • 승네군 2008/01/14 19:02 # 삭제 답글

    뮤텍스는 주인이 있지만, 세마포어는 주인이 없다.
    즉, 뮤텍스는 뮤텍스를 소유한 쓰레드에서만 뮤텍스를 해제할수 있지만, 세마포어는 세마포어를 소유한 쓰레드가 아니라도 세마포어를 해제할수 있다.

    또한, 뮤텍스는 뮤텍스를 소유한 쓰레드가 뮤텍스를 다시 소유하려고 해도 데드락이 발생하지 않지만, 세마포어의 경우(ex> 바이너리 세마포어) 세마포어를 소유한 쓰레드가 다시 세마포어를 소유하려고 하면 이미 세마포어는 누군가(실제로는 자기 자신)에게 소유되어 있음으로 누군가가 세마포어를 해제하기를 기다리지만, 해제하지 않음으로 데드락에 빠지게 된다.

    라고 생각하면 될듯 하담 : )
  • 승네군 2008/01/14 19:22 # 삭제 답글

    주인이 여러개라고 생각해도 되겠다. : )
  • WERT 2008/01/15 01:27 # 답글

    역시 형은 천재?
    전 세마포어가 뮤텍스랑 똑같은데 다만 카운터를 정해놓고 그 카운터만큼 주인을 받아들일 수 있게 하는 건 줄만 알았는데 차이점이 있었군요. 좀더 공부해야겠어요. 잘 배우고 가요 ;)
  • 승네군 2008/01/15 10:54 # 삭제 답글

    ...저건 기초.. ??응?!
  • WERT 2008/01/15 19:47 # 답글

    ㅎㅎ 저한테는 기초도 많이 어려워요.. -_ -)
  • acedon 2008/01/22 03:37 # 답글

    와우,, 승례형을 대적할자 원평이오??ㅋ
댓글 입력 영역