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

Anonim

뮤텍스와 세마포

뮤텍스는 방의 단일 키와 유사합니다. 스레드와 비슷한 키를 가진 사람 만이 방에 액세스 할 수 있습니다. 액세스 권한이있는 사람은 그 다음 사람에게 키를 포기해야합니다. 따라서 뮤텍스는 스레드를 획득 한 스레드에 의해서만 릴리스 될 수 있습니다.

뮤텍스는 보통 한 번에 여러 스레드에서 실행할 수없는 코드의 일종 인 재진입 코드의 섹션에 대한 액세스를 직렬화하는 데 사용됩니다. 단일 스레드 만 섹션에 허용됩니다. 이렇게하면 대기열의 다른 스레드가 강제로 대기합니다. 스레드가 액세스하기 전에 스레드가 섹션을 포기하기 전까지 스레드가 대기해야합니다. 뮤텍스에서 같은 유추를 사용하여, 세마포어는 유사한 잠금을 가진 동일한 수의 방을 액세스 할 수있는 유사한 키의 수입니다. 세마포어 또는 세마포어 값의 값은 방에 입장하거나 퇴장하는 사람 (스레드)의 수에 따라 다릅니다. 5 개의 방이 있고 모두 점유 된 경우 세마포어 수는 0입니다. 두 명이 방을 떠날 경우 카운트는 2이고 두 개의 키는 큐의 다음 두 개에 부여됩니다.

즉, 세마포어는 모든 스레드 또는 프로세스가 동시에 신호를 보낼 수 있으며 동기화가 필요한 응용 프로그램에 이상적입니다. 그럼에도 불구하고, 세마포어는 최대 세마포어 카운트를 기반으로 공통 자원의 동시 사용자 수를 효과적으로 제한하는 데 사용됩니다.

기본적으로 뮤텍스는 값이 1 인 세마포어로 간주 될 수 있습니다.

세마포어의 감소 및 증가는 스레드가 공통 자원에 대한 액세스를 요청하는지 또는 섹션을 떠날 지에 따라 달라집니다.

이론적으로 뮤텍스와 (바이너리) 세마포어는 의미 상 유사하다. 뮤텍스의 구현은 세마포어를 사용하여 수행 할 수 있으며 그 반대의 경우도 있습니다. 그러나 실제로는 약간 다를 수 있습니다. 뮤텍스는 상호 배제에만 적용되며, 바이너리 세마포어는 상호 배제 및 이벤트 통보 용으로 사용됩니다. 구현과 일반 의미 측면에서 매우 유사하지만 사용 방법이 다릅니다.

요약:

1. 뮤텍스는 일반적으로 공통 리소스에 대한 액세스를 직렬화하는 데 사용되는 반면 세마포는 여러 동시 액세스입니다. 2. 뮤텍스는 하나의 카운트를 가진 세마포어와 같습니다. 3. 뮤텍스는 단일 스레드가 액세스 할 수있게하며 세마포어는 모든 스레드 또는 프로세스가 동시에 신호를 보낼 수 있습니다. 4. 세마포어는 동기화에 이상적이며 뮤텍스가 상호 배제에만 적용되는 동안 이벤트 알림 및 상호 배제에 자주 사용됩니다.