**뮤텍스(Mutex)**와 **세마포어(Semaphore)**는 모두 동시성 프로그래밍에서 **상호 배제(Mutual Exclusion)**를 구현하기 위해 사용되는 동기화 기법입니다. 이들은 멀티스레드 환경에서 공유 자원에 대한 접근을 제어하는 데 사용되며, 서로 다른 스레드가 자원을 동시에 수정하지 못하게 방지합니다. 이 두 개념은 비슷하지만, 동작 방식과 사용 목적에서 차이가 있습니다.
1. 뮤텍스(Mutex, Mutual Exclusion)
뮤텍스는 "Mutual Exclusion"의 줄임말로, 하나의 스레드만 자원에 접근할 수 있도록 보장하는 락입니다.
주요 특징:
- 단일 접근: 한 번에 오직 하나의 스레드만 락을 획득하고, 자원에 접근할 수 있습니다. 다른 스레드들은 락이 해제될 때까지 대기해야 합니다.
- 소유권: 뮤텍스를 획득한 스레드는 반드시 그 락을 해제해야 합니다. 다른 스레드는 이 락을 해제할 수 없습니다.
- 사용 목적: 뮤텍스는 한 스레드가 공유 자원을 사용하는 동안 다른 스레드들이 그 자원에 접근하지 못하게 하여 데이터 일관성을 유지하기 위해 사용됩니다.
2. 세마포어(Semaphore)
세마포어는 정해진 수의 스레드가 자원에 접근할 수 있도록 제어하는 카운터 역할을 합니다.
주요 특징:
- 카운터 기반 접근: 세마포어는 일정 수의 자원을 관리하며, 이 자원을 동시에 사용할 수 있는 스레드의 수를 제한합니다. 세마포어 값이 1인 경우 뮤텍스처럼 동작하며, 여러 스레드가 동시에 자원에 접근할 수 있도록 하려면 세마포어 값(카운터)을 2 이상으로 설정합니다.
- 소유권 없음: 세마포어는 뮤텍스와 달리 특정 스레드의 소유권이 없습니다. 한 스레드가 세마포어를 획득하고, 다른 스레드가 해제할 수 있습니다.
- 사용 목적: 세마포어는 여러 스레드가 동시에 접근할 수 있는 자원의 수를 제어하거나, 임계 구역에 진입할 수 있는 스레드의 수를 제한할 때 사용됩니다.
차이점 요약
- 뮤텍스(Mutex):
- 동시 접근: 한 번에 하나의 스레드만 자원에 접근할 수 있습니다.
- 소유권: 락을 획득한 스레드만이 락을 해제할 수 있습니다.
- 사용 목적: 자원에 대한 단일 접근 제어.
- 세마포어(Semaphore):
- 동시 접근: 지정된 수의 스레드가 동시에 자원에 접근할 수 있습니다.
- 소유권: 특정 스레드에 소유되지 않으며, 획득한 스레드와 다른 스레드가 해제할 수 있습니다.
- 사용 목적: 자원의 동시 접근 제한, 임계 구역에 진입할 수 있는 스레드 수 제한
이 두 동기화 도구는 멀티스레딩 환경에서 자원 접근을 안전하게 제어하기 위해 필수적입니다. 뮤텍스는 단일 접근을 보장하며, 세마포어는 여러 스레드의 동시 접근을 제어하는 데 유용합니다.
'Database' 카테고리의 다른 글
fsync() 와 O_SYNC() (0) | 2024.09.11 |
---|---|
데이터베이스 트랜잭션에서 ACID (0) | 2024.08.14 |
CRUD 작업(커밋하는 순간 어떤일이 일어나나) (0) | 2024.08.14 |
FileReader와 BufferedReader (0) | 2024.08.12 |
UML(Unified Modeling Language) (0) | 2024.08.05 |