Pergunta

Qual é a diferença entre um monitor de e uma bloqueio

Se um bloqueio é simplesmente uma implementação de exclusão mútua, então é um monitor simplesmente uma maneira de fazer uso do tempo de espera inbetween execuções método?

Uma boa explicação seria realmente útil graças ....

relação

Foi útil?

Solução

Por exemplo, em C # .NET uma declaração de bloqueio é equivalente a:

Monitor.Enter(object);
try
{
    // Your code here...
}
finally
{
    Monitor.Exit(object);
}

No entanto, tenha em mente que monitor pode também Wait() e Pulse(), que muitas vezes são úteis em situações de multithreading complexos.

Editar: Em versões posteriores do .NET framework, isto foi alterado para:

bool lockTaken = false;
try
{
    Monitor.Enter(object, ref lockTaken);
    // Your code here...
}
finally
{
    if (lockTaken)
    {
        Monitor.Exit(object);
    }
}

Outras dicas

Eles estão relacionados. Por exemplo, em C # declaração bloqueio é um try-finally simples invólucro em torno entrando em um monitor e sair um quando terminar.

Os monitores são assistidos pelo compilador bloqueia "semi-automático". Eles permitem declarar métodos synchronized em classes, etc. Esta é apenas uma abordagem diferente para fornecer exclusão mútua. Eu encontrei este livro para ser a explicação mais aprofundada dos conceitos, embora é principalmente voltado para desenvolvedores OS.

Um bloqueio garante exclusão mútua.

Um monitor associados os dados a serem protegidos, a exclusão mútua e sincronização primitivos necessários para acessos de proteção para os dados.
A sincronização é utilizado, por exemplo quando você precisa de um segmento para esperar até que ocorre um evento (por exemplo, espera até outro segmento coloca um item em uma fila).

Monitores é uma construção da linguagem de programação que faz a mesma coisa como semiphores / travas, mas Monitores controlar os dados compartilhados através da sincronização em tempo de execução. Em contraste, fechaduras proteger os dados compartilhados por apenas "fiação", que pode levar a utilização da CPU pobres.

Não há nenhuma diferença, bloqueio gera Monitor.Enter e Monitor.Exit dentro de um / bloco try, finalmente. Usando o Monitor de sobre bloqueio permite-lhe afinar porque tem pulso e PulseAll. Você também pode ter processamento alternativo que você deve ser capaz de adquirir o bloqueio com TryEnter.

Bloqueio concentrar em apenas exculsion mútua, mas Moniter fornece exclusão mútua automaticamente.

Portanto, não precisa se preocupar de usar exclusão mútua em Monitor. Em vez de ME, precisamos consern de sycronzing somente quando nós fazer a programação.

Moniter fornece a maneira mais sistemática de programação. É, para esse fim, é um mais avançado.

Monitor é o conceito e Lock é a implementação real.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top