Tips/LINUX2009. 9. 18. 18:23
아래의 글은 O'Reilly Linux DevCenter의 글을 참고해서 요약 정리한 것입니다
리눅스 맨페이지를 보려면 man sem_overview 하십시오

  • System V semaphores' API
    • semget(), semctl(), semop()
  • POSIX semaphores' API
    • sem_init(), sem_wait(), sem_post(), sem_destroy()
  • System V 세마포어와 POSIX 세마포어의 차이점

    •    System V Semaphores
       POSIX Semaphores
       API's semget(), semctl(), semop() sem_init(), sem_wait(), sem_post(), sem_destroy() ...

       세마포어 카운터

      자유로움  1단위로 증감
       세마포어 권한
      가능
       불가
       원자적 초기화 및 생성

      아니오

       예

       API의 직관성
       떨어짐  우수함
       세마포어들 간의 관계

      배열 관계

       각각의 개체
       여러 프로세스 간 유효한 세마포어
       가능

       불가(Unnamed semaphores)

       성능

       상대적으로 떨어짐 상대적으로 더 우수
           

  • 세마포어와 뮤텍스의 차이점
    • 세마포어는 뮤텍스로 쓸 수 있지만, 뮤텍스는 세마포어의 역할을 할 수 없다. 즉 바이너리 세마포어는 뮤텍스와 같이 동작한다.
    • 세마포어는 소유자가 없고, 뮤텍스는 소유자가 있다.
    • 뮤텍스는 한 프로세스 내부에서 쓰레드 간에 리소스를 동시에 접근할 수 없게하기 위해 사용하고, 기본적으로 세마포어는 공유된 자원을 정해진 수 만큼만 사용하도록 제한하기 위해 사용한다.
    • 세마포어는 파일 형태로 구현되며, 명시적으로 종료하지 않는 한 시스템 전체에 영향을 미치게 할 수 있다(다른 프로세스 사이에서도). 반대로 뮤텍스는 한 프로세스 안에서만 유효하며 프로세스가 종료되면 사라진다.
    • 뮤텍스가 세마포어 보다 가벼우며 사용하는 문법도 더 간단하다.
  • 세마포어의 기본 알고리즘
    • Wait (Lcok)동작: 얻으려고 하는 세마포어의 카운트가 0보다 작거나 같으면 무한 대기하고 있다가, 0보다 커지면 카운트를 -1한다.
    • Signal (Unlock)동작: 세마포어 카운트를 1 증가시킨다.


Posted by young.h.rhie