Diferença entre Mutex e Evento

Mutex vs Event

No C #, existem várias opções de sincronização de encadeamento diferentes. Os dois mais amplamente utilizados são mutex e evento. Qual é exatamente a diferença entre esses dois? Qual é a melhor opção?

A opção de evento pode dar aos segmentos a opção de bloquear até que um evento seja transmitido, portanto, o nome "evento". É o mesmo que colocar algo para dormir e apenas acordá-lo quando algo importante acontece. Os eventos são diferentes dos mutexes porque os mutexes não têm a opção ou função de sinalização. Os eventos são capazes de limpar o sinal depois que alguém que foi capaz de esperar por ele for acordado. Até as APIs podem permitir a opção de bloquear até que um ou todos os diferentes eventos sejam sinalizados. Além disso, os eventos são objetos do kernel. Eles não são "mais leves" em comparação aos mutexes. Um evento é basicamente um objeto de kernel com dois estados. Normalmente, um evento sinaliza a chegada de um evento e, às vezes, até o final de uma operação de E / S.

"Mutex" significa Exclusão Mútua. É uma forma de mecanismo de coordenação com escopo para recursos compartilhados. Pense nisso como uma forma de transação. Você não é obrigado a esperar, embora deseje acessar alguns recursos compartilhados (apenas no caso em que outras pessoas já estejam acessando) que você está bloqueando. Um mutex consiste em dois estados, embora exista para efetivar uma exclusão mútua. Isso ocorre quando você deseja proteger um trecho de código que geralmente atualiza um recurso compartilhado da parte em que o mutex é reivindicado na parte em que será lançado. Isso leva ao fato de que nenhum outro thread pode passar pela seção.

As pessoas que tentaram simular um evento com a ajuda de um mutex tiveram que encontrar o problema em que, assim que o bloqueio é adquirido ou o evento foi sinalizado, a pessoa mantém todos os outros fora até que o bloqueio seja liberado. Esta não é a semântica de um evento que está sendo sinalizado. Um evento pode permanecer publicado e uma forma de gate estará disponível para todos os testes de encadeamento no evento sem bloqueios. O Mutex comprometido com a sincronização entre processos está no objeto no modo kernel. Eventos feitos para sincronização multithread sob um método estão no objeto de modo de usuário.

O objeto Mutex é muito pesado e muito geral. Objetos de evento são muito mais leves. A sincronização no modo de usuário é usada na maioria das situações devido ao motivo de fornecer menos ciclos de CPU. O Mutex é muito parecido com uma seção crítica e é usado para sincronizar o acesso aos recursos compartilhados. Os eventos têm uma função totalmente diferente porque são usados ​​para sincronizar tarefas ou para gerenciar o agendamento de tarefas para algumas pessoas.

Os eventos são mais uma variável de condição, ao contrário do Mutex, que é mais como um
monitor em algumas terminologias, ou pode ser uma forma tradicional de semáforo / mutex.

Resumo:

1.A opção de evento pode dar aos threads a opção de bloquear até que um evento seja transmitido, assim o nome "evento".

2.Um evento é basicamente um objeto de kernel com dois estados. Normalmente, um evento sinaliza a chegada de um evento e, às vezes, até o final de uma operação de E / S.

3. "Mutex" significa Exclusão Mútua. É uma forma de mecanismo de coordenação com escopo para recursos compartilhados.

4.Mutex comprometido com a sincronização entre processos está no objeto no modo kernel. Eventos feitos para sincronização multithread sob um método estão no objeto de modo de usuário.

5.Os eventos são mais uma variável de condição, ao contrário do Mutex, que é mais como um
monitor em algumas terminologias, ou pode ser uma forma tradicional de semáforo / mutex.