뮤텍스와 세마포어 – 차이점

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

  • Mutex는 잠금 메커니즘인 반면 Semaphore는 신호 메커니즘입니다.
  • Mutex는 객체일 뿐이고 Semaphore는 정수입니다.
  • 뮤텍스에는 하위 유형이 없지만 세마포에는 세마포와 이진 세마포를 계산하는 두 가지 유형이 있습니다.
  • 세마포어는 대기 및 신호 작업 수정을 지원하는 반면, Mutex는 리소스를 요청하거나 해제할 수 있는 프로세스에 의해서만 수정됩니다.
  • 세마포어 값은 wait() 및 signal() 작업을 사용하여 수정되는 반면 Mutex 작업은 잠기거나 잠금 해제됩니다.

세마포어란 무엇입니까?

세마포어 단순히 음수가 아니고 스레드 간에 공유되는 변수입니다. 세마포어는 신호 메커니즘이며, 세마포어를 기다리고 있는 스레드는 다른 스레드에 의해 신호를 받을 수 있습니다. XNUMX개를 사용합니다 atomic 작업, 1) 대기, 2) 신호 방법 sync정시화.

세마포어는 리소스 설정 방법에 따라 리소스에 대한 액세스를 허용하거나 허용하지 않습니다.

뮤텍스란 무엇입니까?

Mutex의 전체 형태는 Mutual Exclusion Object입니다. 공유 리소스에 대한 액세스를 제어하는 ​​데 사용되는 특별한 유형의 바이너리 세마포어입니다. 확장된 우선순위 반전 문제를 방지하기 위한 우선순위 상속 메커니즘이 포함되어 있습니다. 이를 통해 현재 우선 순위가 높은 작업을 가능한 한 짧은 시간 동안 차단 상태로 유지할 수 있습니다. 그러나 우선순위 상속은 우선순위 역전을 수정하지 않고 그 효과를 최소화할 뿐입니다.

세마포어 사용

싱글의 경우 buffer, 4KB를 분리할 수 있습니다. buffer 1개의 XNUMXKB로 buffer에스. 세마포어는 다음 네 가지와 연관될 수 있습니다. buffer에스. 이를 통해 사용자와 제작자는 서로 다른 작업을 수행할 수 있습니다. buffer동시에.

뮤텍스 사용

뮤텍스는 키(뮤텍스)를 갖고 작업을 진행할 수 있는 생산자 또는 소비자일 수 있는 상호 배제를 제공합니다. 생산자가 채우는 한 buffer, 사용자는 기다려야 하며 그 반대의 경우도 마찬가지입니다. Mutex 잠금에서는 항상 단일 스레드만 전체 작업을 수행할 수 있습니다. buffer.

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

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

파라미터 세마포어 뮤텍스
기구 일종의 신호 메커니즘이다. 잠금 메커니즘입니다.
데이터 형식 세마포어는 정수 변수입니다. 뮤텍스는 단지 객체일 뿐입니다.
가감 대기 및 신호 작업은 세마포어를 수정할 수 있습니다. 리소스를 요청하거나 해제할 수 있는 프로세스에 의해서만 수정됩니다.
자원 관리 사용 가능한 리소스가 없으면 프로세스에는 대기 작업을 실행해야 하는 리소스가 필요합니다. 세마포어의 개수가 0보다 커질 때까지 기다려야 합니다. 잠겨 있으면 프로세스가 기다려야 합니다. 프로세스는 대기열에 보관되어야 합니다. 뮤텍스가 잠금 해제된 경우에만 액세스해야 합니다.
Thread 여러 프로그램 스레드를 가질 수 있습니다. 뮤텍스에는 여러 프로그램 스레드가 있을 수 있지만 동시에 있을 수는 없습니다.neo우습게.
소유권 값은 리소스를 해제하거나 획득하는 모든 프로세스에 의해 변경될 수 있습니다. 객체 잠금은 해당 객체에 대한 잠금을 획득한 프로세스에 의해서만 해제됩니다.
유형 세마포어의 종류에는 카운팅 세마포어와 바이너리 세마포어가 있습니다. Mutex에는 하위 유형이 없습니다.
조작 wait()와 signal() 연산을 이용해 세마포어 값을 수정한다. 뮤텍스 개체가 잠겨 있거나 잠금 해제되었습니다.
자원 점유 모든 자원이 사용되고 있고 자원을 요청하는 프로세스가 wait() 연산을 수행하고 세마포어 개수가 1보다 커질 때까지 자신을 차단하면 점유됩니다. 객체가 이미 잠겨 있는 경우 리소스를 요청하는 프로세스는 대기하고 잠금이 해제되기 전에 시스템에 의해 대기열에 추가됩니다.

뮤텍스와 세마포어에 대한 일반적인 사실

다음은 Mutex 및 Semaphore에 대한 몇 가지 일반적인 사실입니다.

  • 하나의 작업만 뮤텍스를 획득할 수 있습니다. 따라서 뮤텍스에는 소유권이 있으며 소유자만이 뮤텍스를 해제할 수 있습니다.
  • 뮤텍스와 세마포어를 사용하는 이유는 구현의 유사성으로 인해 다를 수 있습니다. 뮤텍스를 이진 세마포어라고 합니다.
  • 널리 알려진 오해 중 하나는 뮤텍스와 세마포어가 거의 동일하다는 것입니다. 유일한 차이점은 뮤텍스는 1까지 계산할 수 있고 세마포어는 0부터 N까지 계산할 수 있다는 점입니다.
  • 바이너리 세마포어와 뮤텍스 사이에는 항상 불확실성이 있습니다. 뮤텍스가 이진 세마포어라는 말을 들을 수도 있는데 이는 올바르지 않습니다.

세마포어의 장점

다음은 세마포어 사용의 장점/이점입니다.

  • 둘 이상의 스레드가 임계 섹션에 액세스할 수 있도록 허용합니다.
  • 세마포어는 기계 독립적입니다.
  • 세마포어는 마이크로커널의 기계 독립적인 코드로 구현됩니다.
  • 여러 프로세스가 임계 섹션에 들어가는 것을 허용하지 않습니다.
  • 세마포어에는 바쁜 대기가 있기 때문에 처리 시간과 자원의 낭비가 없습니다.
  • 이는 기계 독립적이며 마이크로커널의 기계 독립적 코드에서 실행되어야 합니다.
  • 이를 통해 리소스를 유연하게 관리할 수 있습니다.

뮤텍스의 장점

Mutex의 중요한 장점/이점은 다음과 같습니다.

  • 뮤텍스는 중요한 섹션에 진입한 다음 해제하기 전에 획득한 단순한 잠금입니다.
  • 주어진 시간에 하나의 스레드만 임계 섹션에 있기 때문에 경쟁 조건이 없으며 데이터는 항상 일관성을 유지합니다.

세마포어의 단점

여기에는 세마포어의 단점/단점이 있습니다.

  • 세마포어의 가장 큰 한계 중 하나는 우선순위 반전입니다.
  • 운영 체제는 대기 및 신호 세마포어에 대한 모든 호출을 추적해야 합니다.
  • 해당 사용은 강제되지 않으며 관례에 따른 것입니다.
  • 드를 피하기 위해adlock세마포어에서는 대기 및 신호 작업이 올바른 순서로 실행되어야 합니다.
  • 세마포어 프로그래밍은 com입니다.plex 방법이므로 상호 배제를 달성하지 못할 가능성이 있습니다.
  • 또한 모듈성을 상실하게 되므로 대규모 사용에는 실용적인 방법이 아닙니다.
  • 세마포어는 프로그래머 오류가 발생하기 쉽습니다.
  • 그것은 일으킬 수 있습니다 deadlock 또는 프로그래머 오류로 인한 상호 배제 위반.

뮤텍스의 단점

Mutex의 단점/단점은 다음과 같습니다.

  • 스레드가 잠금을 획득하고 절전 모드로 전환되거나 선점되면 다른 스레드가 앞으로 나아갈 수 없습니다. 이는 기아로 이어질 수 있습니다.
  • 이를 획득한 컨텍스트와 다른 컨텍스트에서는 잠그거나 잠금 해제할 수 없습니다.
  • 임계 섹션에는 한 번에 하나의 스레드만 허용되어야 합니다.
  • 정상적인 구현에서는 바쁜 대기 상태가 되어 CPU 시간이 낭비될 수 있습니다.