세마포어는 여러개의 카운트를 가지고, 뮤텍스는 카운트가 1인 세마포어입니다.
세마포어의 카운트 획득/반환은 같은 스레드 안에서 이루어지지 않아도 되지만,
(즉 스레드 A가 획득하고 스레드 B가 반환해도 됩니다.)
뮤텍스의 경우 획득했던 스레드가 반환해야 하며, 카운트를 획득했던 스레드가
반환하지 않고 종료된 경우 해당 뮤텍스 카운트를 다른 스레드가 획득할 수 없게
되므로, abandon되어 다른 스레드가 사용가능하도록 만듭니다.(abandon을
뭐라고 번역해야 할지 모르겠네요.-_-; )
크리티컬 섹션은 뮤텍스와 역할은 같으나, 하나의 어플리케이션 내에서 사용되도록
만들어진 메모리 객체이며,(내부적으로는 커널 오브젝트인 세마포어를 사용합니다만)
적절한 spincount를 줘서 유저모드<->커널모드의 변환 없이 효율적으로 사용하는 것을
가능하게 합니다.(Programming Applications for MS Windows에서는 spincount를
4000정도 주는 것을 추천하고 있습니다.)
세마포어의 활용은 다양합니다. 윗 글처럼 이벤트용으로 사용할 수도 있고, 전체 스레드나
어플리케이션 사이에서 공유객체의 수를 제한할 때 사용할 수도 있습니다.
세마포어,뮤텍스,이벤트 3개의 thread syncronize object는 일종의 표준이며, 기본적으로
프로세스간, 스레드 간에서 모두 사용할 수 있습니다.(프로세스간에서 사용할때는 이름을
명시해줘야 합니다.)
펌... 텍스트 파일에 저장해뒀었는데.. 주소가 어디였지...
'OpenSTUDY > TEMP' 카테고리의 다른 글
NaverMap_api (0) | 2012.03.04 |
---|---|
3ds max Legs (0) | 2011.12.20 |
3ds max Leg (0) | 2011.11.07 |
uCOS-Ⅱ (0) | 2011.11.07 |
Color app (0) | 2011.11.05 |