**뮤텍스(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

+ Recent posts