가장 대표적인 동기화 객체가 semaphore와 mutex인데도 불구하고, 윈도우즈 프로그래머에게는 낯선 경우가 많다(내 주변에만 그럴지도). 윈도우즈 환경에서는 저 둘에 비해 사기에 가까운 성능을 보이는 critical section을 더 많이 사용하기 때문에 실제로 쓸 기회가 별로 없는 것도 사실이다. 이렇듯 낯선 semphore와 mutex에 차이점에 대해서 알아보자.

둘은 비슷한 점이 많아서 mutex는 최대값이 1인 semaphore라고 설명하기도 한다. 실제로 최대값이 1인 semaphore는 mutex의 행동을 거의 100% 가깝게 흉내낼 수 있다. 둘다 프로세스 사이나 쓰레드 간에 모두 사용이 가능하다. 이름만 있으면 다른 프로세스에서도 확실히 사용이 가능하다(OpenSemaphoreOpenMutex).

둘의 가장 큰 차이는 mutex에 소유 쓰레드라는 개념이 존재한다는 것이다. Mutex의 소유권을 획득(WaitForSingleObject)하면 그 mutex는 해당 쓰레드에서만 접근 가능한 상태로 변한다. 그래서 다른 쓰레드에서는 ReleaseMutex를 신나게 호출해봐야 원하는 결과를 얻을 수 없다.

Critical section이나 semaphore같은 경우에는 다른 쓰레드에서 락의 해제가 가능해 관리자를 만들어 중간에 락을 해제할 수 있지만 mutex는 잘못 걸리면 그냥 죽어야된다. 그런 문제가 있다면 semaphore만 쓰면되지 왜 mutex같은 걸 만들었나요?라고 묻는다면 간단한게 언제나 좋다라고 대답할 수밖에 없다. 대부분의 경우에 mutex가 훨씬 더 단순하니까.

언제나 그렇지만 상황에 맞는 걸 찾아서 쓰는건 본인의 몫이다.
Posted by 조성경
◀ PREV : [1] : ... [31] : [32] : [33] : [34] : [35] : [36] : [37] : [38] : [39] : ... [95] : NEXT ▶

카테고리

분류 전체보기 (95)
Programming (33)
보고듣고읽고 (22)
긁적 (35)
Architecture (1)
서버 만들기 (1)

달력

«   2010/03   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31