뮤텍스와 이벤트의 차이점

Anonim

뮤텍스 vs 이벤트

C #에는 많은 스레딩 동기화 옵션이 있습니다. 뮤텍스와 이벤트가 널리 사용됩니다. 이 둘의 차이점은 무엇입니까? 어느 것이 더 나은 선택입니까?

이벤트 옵션은 이벤트가 브로드 캐스트 될 때까지 스레드에게 차단 옵션을 제공하여 이름 "이벤트"를 브로드 캐스팅 할 수 있습니다. "뭔가 중요한 것은있을 때만 잠에서 깨우는 것과 같습니다. 뮤텍스에는 시그널링 옵션이나 함수가 없으므로 이벤트는 뮤텍스와 다릅니다. 이벤트는 기다릴 수있는 사람이 깨어나면 신호를 지울 수 있습니다. API조차도 여러 이벤트 중 하나 또는 모두가 신호를받을 때까지 옵션을 차단할 수 있습니다. 또한 이벤트는 커널 개체입니다. 뮤텍스에 비해 "더 가벼운"것은 아닙니다. 이벤트는 기본적으로 두 가지 상태를 갖는 커널 객체입니다. 일반적으로 이벤트는 이벤트가오고 때로는 I / O 작업이 끝났음을 알립니다.

"뮤텍스"는 상호 배제를 나타냅니다. 공유되는 자원에 대한 범위 조정 메커니즘의 한 형태입니다. 그것을 거래 형태로 생각하십시오. 차단하려는 일부 공유 리소스 (다른 사용자가 이미 액세스하고있는 인스턴스에서만)에 액세스하려고하지만 기다릴 필요가 없습니다. 뮤텍스는 상호 배제를 적용하기 위해 존재하지만 두 가지 상태로 구성됩니다. 이것은 일반적으로 mutex가 선언 된 부분에서 릴리스 될 부분으로 공유 리소스를 업데이트하는 코드를 보호하려는 경우를위한 것입니다. 이것은 다른 스레드가 섹션을 통과 할 수 없다는 사실로 연결됩니다.

뮤텍스의 도움을 받아 이벤트를 시뮬레이션하려고 시도한 사람들은 문제가 발생하면 잠금 장치가 확보되거나 이벤트가 신호를 받자 마자 다른 사람이 모두 밖으로 나가게합니다. 자물쇠가 풀릴 때까지 이것은 신호되는 이벤트의 의미가 아닙니다. 이벤트가 게시 된 채로 남아있을 수 있으며 잠금이없는 이벤트의 모든 스레드 테스트에 대해 게이트 양식을 사용할 수 있습니다. 프로세스 간 동기화를 위임 한 뮤텍스는 커널 모드 개체에 있습니다. 한 가지 방법으로 멀티 스레드 동기화를 위해 만들어진 이벤트는 사용자 모드 개체에 있습니다.

뮤텍스 객체가 너무 무겁고 너무 일반적입니다. 이벤트 객체는 훨씬 가볍습니다. 사용자 모드 동기화는 CPU주기가 줄어든 이유 때문에 대부분의 상황에서 사용됩니다. 뮤텍스는 중요한 섹션과 매우 흡사하며 공유되는 리소스에 대한 액세스를 동기화하는 데 사용됩니다. 이벤트는 태스크를 동기화하거나 일부 사람들을 위해 태스크 스케줄링을 관리하는 데 사용되므로 완전히 다른 기능을 갖습니다.

뮤텍스는 어떤 용어에서는 모니터와 비슷하지만 세마포어 / 뮤텍스의 전통적인 형태 일 수 있습니다.

요약:

1. 이벤트 옵션은 이벤트가 브로드 캐스트 될 때까지 스레드를 차단하는 옵션을 스레드에 제공 할 수 있으므로 이름 "이벤트"가됩니다. "

2. 이벤트는 기본적으로 두 가지 상태를 갖는 커널 객체입니다. 일반적으로 이벤트는 이벤트가오고 때로는 I / O 작업이 끝났음을 알립니다. 3. "뮤텍스"는 상호 배제를 의미합니다. 공유되는 자원에 대한 범위 조정 메커니즘의 한 형태입니다. 4. 프로세스 간 동기화를 위임 한 뮤텍스는 커널 모드 개체에 있습니다. 한 가지 방법으로 멀티 스레드 동기화를 위해 만들어진 이벤트는 사용자 모드 개체에 있습니다. 5. 이벤트는 뮤텍스 (Mutex)와는 달리 조건 변수로 사용됩니다. 뮤텍스는 용어 중 일부에서 모니터와 비슷하거나 세마포어 / 뮤텍스의 전통적인 형태 일 수 있습니다.