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

Anonim

세마포어와 뮤텍스

세마포어는 여러 프로세스가 공용에 액세스하지 못하도록하는 데 사용되는 데이터 구조입니다 자원 또는 중요한 섹션을 병렬 프로그래밍 환경에서 동시에 사용할 수 있습니다. 세마포는 데드 록 및 경쟁 조건을 피하기 위해 사용됩니다. 뮤텍스 (Mutual Exclusion Object)는 여러 동시 프로세스에 의해 동시에 공통 리소스에 대한 액세스를 피하기 위해 사용됩니다.

-> -

세마포 란 무엇입니까?

세마포어는 중요한 섹션에 상호 배제를 제공하는 데 사용되는 데이터 구조입니다. 세마포어는 주로 wait (역사적으로 P로 알려짐) 및 signal (역사적으로 V로 알려짐)이라는 두 가지 작업을 지원합니다. wait 연산은 세마포어가 열리고 signal 연산이 다른 프로세스 (쓰레드)가 들어갈 때까지 프로세스를 차단한다. 각 세마포어는 대기중인 프로세스 대기열과 연관됩니다. wait 오퍼레이션이 쓰레드에 의해 호출 될 때, 세마포어가 열려 있다면 쓰레드는 계속 될 수있다. 대기 조작이 스레드에 의해 호출 될 때 세마포어가 닫히면 스레드는 차단되고 대기열에서 대기해야합니다. 시그널 연산은 세마포어를 열고 이미 큐에서 기다리고있는 쓰레드가 있다면 그 프로세스는 계속 진행할 수있다. 그리고 큐에 대기중인 쓰레드가 없다면 그 시그널은 다음 쓰레드를 위해 기억된다. 뮤텍스 세마포어와 카운팅 세마포어라는 세 가지 유형의 세마포가 있습니다. 뮤텍스 세마포 (mutex semaphores)는 리소스에 대한 단일 액세스를 허용하고 세마포 계산 (counting semaphores)은 여러 스레드가 리소스 (몇 개의 단위가 있음)에 액세스 할 수있게합니다.

뮤텍스 란 무엇입니까?

컴퓨터 응용 프로그램이 시작되면 뮤텍스가 생성되어 리소스에 연결됩니다. 자원이 스레드에 의해 사용될 때, 자원은 잠기고 다른 스레드는 자원을 사용할 수 없습니다. 다른 스레드가 동일한 리소스를 사용하려면 요청을해야합니다. 그런 다음 해당 스레드는 첫 번째 스레드가 자원으로 완료 될 때까지 대기열에 배치됩니다. 첫 번째 스레드가 자원으로 완료되면 잠금이 제거되고 대기열에서 대기중인 스레드가 자원에 액세스 할 수 있습니다. 대기열에서 대기중인 스레드가 여러 개있는 경우 회전 기반으로 액세스가 제공됩니다. 실제적으로 뮤텍스가 여러 스레드 사이에서 자원에 대한 액세스를 번갈아 가며 여러 스레드가 동시에 자원을 소비 할 때 뮤텍스가 표시됩니다. 그러나 내부적으로 단일 스레드 만 주어진 시간에 자원에 액세스합니다.

세마포어와 뮤텍스의 차이점은 무엇입니까?

세마포어와 뮤텍스 객체는 모두 병렬 프로그래밍 환경에서 상호 배제를 달성하는 데 사용되지만 몇 가지 차이점이 있습니다. 뮤텍스 객체는 단일 스레드가 자원 또는 임계 영역을 소비하는 것을 허용하는 반면, 세마포어는 리소스에 대한 제한된 수의 동시 액세스를 허용합니다 (최대 허용 개수 미만).뮤텍스 개체를 사용하면 리소스에 액세스하려는 다른 스레드는 현재 스레드가 리소스를 사용하여 끝날 때까지 큐에서 대기해야합니다.