날짜 : 2023-11-26 17:11
주제 :
개요
이 두 개념은 동시성 프로그래밍에서 중요한 역할을 하며, 여러 스레드나 프로세스가 동시에 자원에 접근하는 것을 제어하는 방법입니다.
Semaphore (세마포어)
세마포어는 동기화 도구로, 특정 자원에 대한 동시 접근을 제한하는 데 사용됩니다. 세마포어는 주로 두 가지 유형이 있습니다: 이진 세마포어와 카운팅 세마포어.
-
이진 세마포어 (Binary Semaphore)
- 0 또는 1의 값만을 가질 수 있습니다.
- Mutex와 매우 유사하게 작동하지만, 소유권 개념이 없습니다.
- 주로 상호 배제 (mutual exclusion)을 위해 사용됩니다.
-
카운팅 세마포어 (Counting Semaphore)
- 0 이상의 정수 값을 가질 수 있습니다.
- 여러 스레드가 동시에 자원을 사용할 수 있도록 하되, 동시에 접근할 수 있는 최대 스레드 수를 제한합니다.
- 주로 자원 관리에 사용됩니다.
세마포어의 기본적인 작동 원리는 다음과 같습니다:
- Wait (P) 연산: 세마포어의 값을 감소시킵니다. 만약 값이 0이면, 스레드는 대기 상태가 되며 자원을 사용할 수 있을 때까지 기다립니다.
- Signal (V) 연산: 세마포어의 값을 증가시킵니다. 이 연산은 다른 스레드가 자원을 사용할 수 있도록 합니다.
Mutex (뮤텍스)
뮤텍스는 상호 배제를 위한 동기화 메커니즘입니다. 한 번에 하나의 스레드만 특정 자원 또는 코드 섹션에 접근할 수 있도록 합니다.
- 소유권: 뮤텍스는 소유 개념이 있습니다. 뮤텍스를 잠그는 스레드가 반드시 그것을 해제해야 합니다.
- Deadlock 방지: 올바르게 사용하면 데드락(deadlock)을 방지하는 데 도움이 될 수 있습니다. 데드락은 두 개 이상의 스레드가 서로의 자원을 기다리며 영원히 대기하는 상태를 말합니다.
- 기본 원리:
- Lock (잠금) 연산: 뮤텍스를 획득합니다. 만약 뮤텍스가 이미 다른 스레드에 의해 잠겨있다면, 이 스레드는 대기 상태가 됩니다.
- Unlock (해제) 연산: 뮤텍스를 해제하고 다른 스레드가 자원에 접근할 수 있도록 합니다.
차이점 요약
- 용도: 세마포어는 자원의 동시 사용을 제한하는 데 사용되며, 여러 스레드가 동시에 자원을 사용할 수 있습니다. 반면, 뮤텍스는 한 번에 한 스레드만 자원을 사용하도록 제한하는 데 사용됩니다.
- 소유권: 뮤텍스는 잠금을 획득한 스레드가 잠금을 해제할 책임이 있습니다. 세마포어에는 이러한 소유권 개념이 없습니다.
- 유형: 세마포어는 이진 세마포어와 카운팅 세마포어로 구분됩니다. 뮤텍스는 이진 세마포어와 유사하지만, 소유권과 잠금 해제의 책임이 추가된 형태입니다.
출처(참고문헌)
연결문서