방명록
- 뮤텍스(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 다음글이 없습니다.이전글이 없습니다.댓글 - 특징: