리눅스로 서버프로그램을 작성하던 중에 동기화가 문제가 되어 자료를 찾다보니 용어가 혼란스럽다.
어디서는 크리티컬세션이라 하고 어디서는 뮤텍스,세마포어라고 하고..

그래서 시작했다. 용어좀 정리 해보자..

1. 뮤텍스(mutex)

Mutual Exclusion.. 상호 배제
멀티스레드 환경에서 크리티컬세션이 있을경우 어느 스레드가 실행되는 동안 다른 스레드가 접근하는 것을 막고
이전에 실행된 스레드가 세션을 벗어나기를 기다리다가 실행된다.
Windows 에서는 프로세스간에 동기화 처리를 할수 있으나
Linux 계열에서 pThread의 Mutex는 한 프로세스 안의 스레드끼리만 동기화 된다. Windows의 크리티컬세션기법과 비슷.
참조글 : http://kltp.kldp.org/stories.php?story=01/07/05/2982955


2. 세마포어(semaphore)

뮤텍스와 마찬가지로 스레드의 접근을 제어한다.
접근하는 스레드의 개수를 지정할수 있고 그 카운트를 관리하여 카운트가 감소되면 대기상태가 되다가 증가되면 활동상태로 바뀌어 다른 스레드가 접근하도록 하는 방식.


3. 크리티컬세션(critical section)

Windows에서 제공되는 동기화객체. Unix/Linux계열에서는 없는듯 하다.(아시는분 알려주세요ㅠ)
뮤텍스나 세마포어보다 가볍고 같은 프로세스내에서 동기화에 사용한다. 


4. 결론

크리티컬세션은 리눅스계열엔 없다.
뮤텍스는 윈도에서는 좀 묵직하고 리눅스 계열에선 거의 크리티컬세션정도이다.

경우에 따라 다르겠지만 우선 프로세스별로 통신이 불필요할땐
 windows 계열 : 크리티컬세션(강추) ,Unix/Linux 계열 : Mutex  
이 좋고 통신이 필요할땐 경우에 맞춰서 사용한다.

그런데 도대체 spin-lock는 또 뭐냐...

- 틀린 부분이 있을수 있습니다. 지적해주시면 감사하겠습니다.-

To be continued.    -夜昧-
  1. Commented by 팽귄맨 at 2009.11.08 21:05

    크리티컬세션은 리눅스/유닉스에도 있긴하지만 개념이 다른것 같습니다.
    프리터장치같은 공유자원과 같이 특정 자원을 접근하는 프로세스 코드 부분들 크리티컬세션이라 한다더군요.
    크리티컬 세션을 가지는 프로그램은 상호배제를 항상 만족하고 있어야 한다고 합니다.
    프린터의 경우 여러 프로세스가 접근할 경우 상호배제일때 다른 프로세스가 접근이 실패하므로.
    데몬을 통해서 스풀링을 한다고 합니다.