주니봉
  • 뮤텍스(Mutex)와 세마포어(Semaphore)란?
    2025년 09월 01일 11시 46분 53초에 업로드 된 글입니다.
    작성자: 봉주니
    sem_wait(&sem);   // 세마포어 감소, 자원 접근
    // 공유 자원 사용
    sem_post(&sem);   // 세마포어 증가, 자원 해제

    동시성 프로그래밍을 하다 보면 자주 마주치는 개념이 있습니다. 바로 **뮤텍스(Mutex)**와 **세마포어(Semaphore)**입니다. 이 둘은 멀티스레딩 환경에서 자원 접근을 제어하기 위한 도구로, 프로그램의 안정성과 성능을 좌우하는 중요한 역할을 합니다.

     

    🧩 뮤텍스(Mutex)란?

    **뮤텍스(Mutual Exclusion)**는 말 그대로 상호 배제를 의미합니다. 하나의 스레드만 특정 자원(예: 파일, 메모리)에 접근할 수 있도록 제한하는 장치입니다.

    • 특징:
      • 한 번에 오직 하나의 스레드만 자원에 접근 가능
      • 자원을 사용 중인 스레드가 뮤텍스를 잠금(lock) 하면, 다른 스레드는 대기(wait) 상태가 됨
      • 사용이 끝나면 뮤텍스를 해제(unlock) 해야 다른 스레드가 접근 가능
    • 예시:
    pthread_mutex_lock(&mutex);
    // 공유 자원 접근
    pthread_mutex_unlock(&mutex);

    🚦 세마포어(Semaphore)란?

    세마포어는 뮤텍스보다 더 일반적인 동기화 도구입니다. 동시에 접근 가능한 스레드의 수를 제한할 수 있습니다.

    • 특징:
      • 카운터 값을 기반으로 동작
      • 카운터가 0이면 대기, 1 이상이면 접근 가능
      • 뮤텍스는 세마포어의 특수한 형태 (카운터가 1인 경우)
    • 종류:
      • Binary Semaphore: 0 또는 1만 가질 수 있어 뮤텍스처럼 동작
      • Counting Semaphore: 여러 개의 스레드가 동시에 접근 가능
    • 예시:
    •  

    🔍 뮤텍스 vs 세마포어: 차이점 정리

    항목뮤텍스(Mutex)세마포어(Semaphore)
    접근 가능 스레드 수 1개 여러 개 가능
    소유권 소유 스레드만 해제 가능 누구나 해제 가능
    사용 목적 상호 배제 자원 수 제한
    구현 복잡도 상대적으로 단순 상대적으로 복잡

    🛠️ 언제 어떤 걸 써야 할까?

    • 뮤텍스 단일 자원에 대한 접근 제어가 필요할 때 사용합니다. 예를 들어, 하나의 파일을 동시에 여러 스레드가 수정하면 안 되는 경우.
    • 세마포어 제한된 수의 자원을 여러 스레드가 사용할 수 있을 때 유용합니다. 예를 들어, 데이터베이스 연결 풀처럼 최대 10개의 연결만 허용하는 경우.

    ✨ 마무리

    뮤텍스와 세마포어는 멀티스레딩 환경에서 데이터 무결성과 안정성을 확보하기 위한 핵심 도구입니다. 개념은 어렵게 느껴질 수 있지만, 실제로는 매우 직관적이고 실용적인 도구입니다. 상황에 맞게 적절히 사용하면, 성능 좋은 안정적인 프로그램을 만들 수 있습니다.

    반응형

    '리눅스' 카테고리의 다른 글

    tomcat catalina.out 초기화 시키기  (0) 2019.12.16
    vim 에디터 설정  (0) 2018.01.10
    Putty 한글 깨짐  (0) 2017.03.09
    MariaDB UTF8 설정  (0) 2016.07.01
    Ubuntu(우분투) MariaDB 설치  (0) 2016.07.01
    댓글