Semaphore와 Mutex

ORCASUIT·2023년 11월 27일

날짜 : 2023-11-26 17:11

주제 :


개요

이 두 개념은 동시성 프로그래밍에서 중요한 역할을 하며, 여러 스레드나 프로세스가 동시에 자원에 접근하는 것을 제어하는 방법입니다.

Semaphore (세마포어)

세마포어는 동기화 도구로, 특정 자원에 대한 동시 접근을 제한하는 데 사용됩니다. 세마포어는 주로 두 가지 유형이 있습니다: 이진 세마포어와 카운팅 세마포어.

  1. 이진 세마포어 (Binary Semaphore)

    • 0 또는 1의 값만을 가질 수 있습니다.
    • Mutex와 매우 유사하게 작동하지만, 소유권 개념이 없습니다.
    • 주로 상호 배제 (mutual exclusion)을 위해 사용됩니다.
  2. 카운팅 세마포어 (Counting Semaphore)

    • 0 이상의 정수 값을 가질 수 있습니다.
    • 여러 스레드가 동시에 자원을 사용할 수 있도록 하되, 동시에 접근할 수 있는 최대 스레드 수를 제한합니다.
    • 주로 자원 관리에 사용됩니다.

세마포어의 기본적인 작동 원리는 다음과 같습니다:

  • Wait (P) 연산: 세마포어의 값을 감소시킵니다. 만약 값이 0이면, 스레드는 대기 상태가 되며 자원을 사용할 수 있을 때까지 기다립니다.
  • Signal (V) 연산: 세마포어의 값을 증가시킵니다. 이 연산은 다른 스레드가 자원을 사용할 수 있도록 합니다.

Mutex (뮤텍스)

뮤텍스는 상호 배제를 위한 동기화 메커니즘입니다. 한 번에 하나의 스레드만 특정 자원 또는 코드 섹션에 접근할 수 있도록 합니다.

  • 소유권: 뮤텍스는 소유 개념이 있습니다. 뮤텍스를 잠그는 스레드가 반드시 그것을 해제해야 합니다.
  • Deadlock 방지: 올바르게 사용하면 데드락(deadlock)을 방지하는 데 도움이 될 수 있습니다. 데드락은 두 개 이상의 스레드가 서로의 자원을 기다리며 영원히 대기하는 상태를 말합니다.
  • 기본 원리:
    • Lock (잠금) 연산: 뮤텍스를 획득합니다. 만약 뮤텍스가 이미 다른 스레드에 의해 잠겨있다면, 이 스레드는 대기 상태가 됩니다.
    • Unlock (해제) 연산: 뮤텍스를 해제하고 다른 스레드가 자원에 접근할 수 있도록 합니다.

차이점 요약

  • 용도: 세마포어는 자원의 동시 사용을 제한하는 데 사용되며, 여러 스레드가 동시에 자원을 사용할 수 있습니다. 반면, 뮤텍스는 한 번에 한 스레드만 자원을 사용하도록 제한하는 데 사용됩니다.
  • 소유권: 뮤텍스는 잠금을 획득한 스레드가 잠금을 해제할 책임이 있습니다. 세마포어에는 이러한 소유권 개념이 없습니다.
  • 유형: 세마포어는 이진 세마포어와 카운팅 세마포어로 구분됩니다. 뮤텍스는 이진 세마포어와 유사하지만, 소유권과 잠금 해제의 책임이 추가된 형태입니다.

출처(참고문헌)

연결문서

0개의 댓글