추천, 2024

에디터의 선택

세마포와 뮤텍스의 차이점

프로세스 동기화는 공유 데이터의 일관성을 유지하는 데 중요한 역할을합니다. 중요한 섹션 문제를 처리하기위한 소프트웨어 및 하드웨어 솔루션이 모두 제공됩니다. 그러나 중요한 섹션 문제에 대한 하드웨어 솔루션은 구현하기가 어렵습니다. 오늘의 기사에서는 세마포 및 뮤텍스와 같은 중요한 섹션 문제를 처리하는 두 가지 소프트웨어 기반 솔루션에 대해 설명합니다.

세마포어와 뮤텍스의 기본적인 차이점은 세마포어가 시그널링 메커니즘이라는 것입니다. 즉, 프로세스는 wait () 및 signal () 작업을 수행하여 자원 획득 또는 해제 여부를 나타냅니다. 뮤텍스는 잠금 메커니즘이며, 프로세스는 잠금을 획득해야합니다. 뮤텍스 개체 (Mutex Object). 세마포어와 뮤텍스 사이에는 약간의 차이점이 있습니다. 아래에 나와있는 비교 차트의 도움으로 그것들을 논의하겠습니다.

비교 차트

비교의 근거신호기뮤텍스
기본세마포는 신호 메커니즘입니다.뮤텍스는 잠금 메커니즘입니다.
존재세마포어는 정수 변수입니다.뮤텍스는 객체입니다.
기능세마포어 (Semaphore)는 여러 프로그램 스레드가 유한 한 자원 인스턴스에 액세스 할 수있게합니다.뮤텍스 (Mutex)는 여러 프로그램 스레드가 단일 리소스에 액세스 할 수는 있지만 동시에 수행 할 수는 없습니다.
소유권세마포어 값은 자원을 얻거나 해제하는 프로세스에 의해 변경 될 수 있습니다.뮤텍스 객체 잠금은 잠금을 획득 한 프로세스에 의해서만 해제됩니다.
분류세마포어는 카운팅 세마포어와 바이너리 세마포어로 분류 할 수 있습니다.뮤텍스는 더 이상 분류되지 않습니다.
조작세마포어 값은 wait () 및 signal () 연산을 사용하여 수정됩니다.뮤텍스 객체는 리소스를 요청하거나 해제하는 프로세스에 의해 잠기거나 잠금 해제됩니다.
자원 점유모든 리소스가 사용 중이면 리소스를 요청하는 프로세스는 wait () 작업을 수행하고 세마포어 카운트가 1보다 커질 때까지 자체를 차단합니다.뮤텍스 객체가 이미 잠겨 있으면 잠금을 해제 할 때까지 리소스를 요청하는 프로세스가 대기하고 시스템에 대기합니다.

세마포어 정의

세마포는 프로세스 동기화 도구입니다. 세마포어는 일반적으로 시스템에있는 자원의 수로 초기화되는 정수 변수 S 이며 세마포어 값은 초기화와 별도로 wait ()signal ()의 두 함수로만 수정할 수 있습니다.

wait () 및 signal () 작업은 세마포어의 값을 개별적으로 수정합니다. 즉, 프로세스가 세마포 값을 수정할 때 다른 프로세스가 세마포 값을 동시에 수정할 수 없음을 의미합니다. 세마포어는 세 가지 범주의 세마포이진 세마포 계산 방식으로 운영 체제에서 구별됩니다.

세마포어 계산 에서, 세마포어 S 값은 시스템에있는 자원수로 초기화됩니다. 프로세스가 리소스에 액세스하기를 원할 때마다 세마포어에 대한 wait () 작업을 수행하고 세마포어 값을 1 씩 감소시킵니다 . 리소스를 해제하면 세마포어에서 signal () 작업을 수행하고 세마포어 값을 1 씩 증가시킵니다 . 세마포어 카운트가 0이되면 프로세스에 의해 모든 리소스가 점유되었음을 의미합니다. 세마포어 카운트가 0 일 때 프로세스가 리소스를 사용해야 할 경우 wait ()를 실행하고 세마포 값이 0보다 커질 때까지 차단 됩니다.

바이너리 세마포어 에서 세마포 값의 범위는 01 사이입니다. 뮤텍스 잠금과 비슷하지만 뮤텍스는 잠금 메커니즘이지만 세마포는 신호 메커니즘입니다. 바이너리 세마포어에서 프로세스가 리소스에 액세스하려고하면 세마포어에서 wait () 작업을 수행하고 세마포어 값을 1에서 0으로 감소시킵니다. 리소스를 해제하면 세마포어에서 signal () 작업을 수행하고 증가합니다 세마포어의 값이 0이고 프로세스가 리소스에 액세스하려면 wait () 작업을 수행하고 리소스를 사용하는 현재 프로세스가 리소스를 해제 할 때까지 프로세스를 차단합니다.

뮤텍스의 정의

상호 배제 오브젝트 는 곧 뮤텍스 (Mutex)라고합니다. 상호 배제라는 용어에서 한 번에 하나의 프로세스 만 주어진 리소스에 액세스 할 수 있다는 것을 이해할 수 있습니다. 뮤텍스 개체를 사용하면 여러 프로그램 스레드가 동시에 하나가 아닌 동일한 리소스를 사용할 수 있습니다.

프로그램이 시작될 때 주어진 자원에 대한 뮤텍스 객체를 생성하도록 시스템에 요청합니다. 시스템은 고유 한 이름 또는 ID로 mutex 오브젝트를 작성합니다. 프로그램 스레드가 뮤텍스 개체에서 잠금을 차지하는 리소스를 사용하려고 할 때마다 리소스를 사용하고 사용 후 뮤텍스 개체에 대한 잠금을 해제합니다. 다음 프로세스는 뮤텍스 객체에 대한 잠금을 획득 할 수 있습니다.

한편, 프로세스는 다른 스레드 / 프로세스가 해당 자원에 액세스 할 수없는 뮤텍스 객체에 대한 잠금을 획득했습니다. 뮤텍스 객체가 이미 잠겨 있다면, 뮤텍스 객체에 대한 락을 획득하고자하는 프로세스는 기다려야하며, 뮤텍스 객체가 잠금 해제 될 때까지 시스템에 의해 큐잉된다.

세마포어와 뮤텍스의 주요 차이점

  1. Semaphore는 wait () 및 semaphore 변수에서 수행되는 signal () 작업이 프로세스가 자원을 확보하는지 또는 자원을 해제하는지 여부를 나타내는 신호 메커니즘입니다. 반면 뮤텍스는 잠금 메커니즘이며 리소스를 획득하는 프로세스는 뮤텍스 개체를 잠그고 리소스 프로세스를 해제하는 동안 뮤텍스 개체를 잠금 해제해야합니다.
  2. 세마포어는 일반적으로 정수 변수이며 뮤텍스는 객체 입니다.
  3. 세마포어는 여러 프로그램 스레드가 리소스유한 인스턴스에 액세스 할 수있게 합니다 . 반면 Mutex는 여러 프로그램 스레드가 한 번에 하나씩 하나의 공유 리소스 에 액세스 할 수 있도록 허용합니다.
  4. 세마포어 변수 값은 wait () 및 signal () 작업을 수행하여 자원을 얻거나 해제 하는 프로세스로 수정할 수 있습니다. 반면에 mutex 객체에서 획득 된 잠금은 mutex 객체에서 잠금을 획득 한 프로세스 에서만 해제 할 수 있습니다.
  5. 세마포어는 뮤텍스와 매우 유사한 세마포어와 바이너리 세마포어세는 두 가지 유형입니다.
  6. 세마포어 변수 값은 초기화와 별도로 wait ()signal () 작업에 의해 수정됩니다. 그러나, 음소거 객체는 리소스를 획득하거나 해제하는 프로세스에 의해 잠기거나 잠금 해제됩니다.
  7. 모든 리소스가 프로세스에 의해 획득되고 리소스가 비어 있지 않으면 리소스를 얻으려는 프로세스는 세마포어 변수에 대한 wait () 작업을 수행하고 세마포어 카운트가 0보다 커질 때까지 차단 합니다. 그러나 뮤텍스 개체가 이미있는 경우 잠긴 다음 자원 대기 를 얻으려는 프로세스가 자원이 해제되고 mutex 객체가 잠금 해제 될 때까지 시스템에서 대기열 에 넣습니다.

결론:

세마포어는 여러 리소스 인스턴스를 사용할 수있는 경우 더 나은 옵션입니다. 단일 공유 자원의 경우 mutex가 더 나은 선택입니다.

Top