Diferença Entre Mutex e Evento Diferença entre

Anonim

Mutex vs Evento

Em C #, existem muitas 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 deles é uma opção melhor?

A opção de evento é capaz de fornecer threads a opção para bloquear até um evento ser transmitido assim o nome "evento. "É o mesmo que colocar algo para dormir e apenas acordá-lo quando algo de significado acontece. Os eventos são diferentes dos mutex porque os mutex não possuem a opção ou função de sinalização. Os eventos são capazes de limpar o sinal, uma vez que alguém que conseguiu aguardar foi despertado. Mesmo as APIs podem permitir que a opção seja bloqueada até que um ou todos os eventos diferentes sejam sinalizados. Além disso, os eventos são objetos do kernel. Eles não são "mais leves" em comparação com mutexes. Um evento é basicamente um objeto 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 escopo para recursos que são compartilhados. Pense nisso como uma forma de transação. Você não é obrigado a esperar, embora você queira acessar alguns recursos compartilhados (somente na instância em que outros já estão acessando) você está bloqueando. Um mutex consiste em dois estados, embora exista para implementar uma exclusão mútua. Isto é para quando você quer 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 segmento 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 está mantendo todo mundo fora até que o bloqueio seja liberado. Esta não é a semântica de um evento que está sendo sinalizado. Um evento pode permanecer postado e uma forma de portão estará disponível para todos os testes de thread no caso de não ter nenhum bloqueio. O Mutex comprometido com a sincronização entre processos é no objeto do modo kernel. Os eventos feitos para sincronização multi-threads sob um método estão no objeto do modo usuário.

O objeto Mutex é muito pesado e muito geral. Os objetos de eventos são muito mais leves. A sincronização do modo de usuário é usada na maioria das situações devido ao fato de que ele dá menos ciclos de CPU. O Mutex é muito parecido com uma seção crítica e é usado para sincronizar o acesso a recursos que são compartilhados. Os eventos têm uma função totalmente diferente porque eles são usados ​​para sincronizar tarefas ou para gerenciamento de agendamento de tarefas para algumas pessoas.

Os eventos são mais uma variável de condição, ao contrário de Mutex, que é mais como um monitor

em alguma terminologia, ou pode ser uma forma tradicional de semáforo / mutex.

Resumo:

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

2. Um evento é basicamente um objeto 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 escopo para recursos que são compartilhados.

4. O Mutex comprometido com a sincronização entre processos é no objeto do modo kernel. Os eventos feitos para sincronização multi-threads sob um método estão no objeto do modo 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 alguma terminologia, ou pode ser uma forma tradicional de semáforo / mutex.