Exclusão mútua
A exclusão mútua (mutex) é um objeto de programa que impede o acesso simultâneo a um recurso compartilhado. Este conceito é usado em programação concorrente com uma seção crítica, um pedaço de código que processa ou tópicos acessar um recurso compartilhado. Apenas um segmento possui o mutex de cada vez, assim, um mutex com um nome exclusivo é criado quando um programa é iniciado. Quando um segmento detém um recurso, tem que bloquear o mutex de outros tópicos para impedir o acesso simultâneo do recurso. Após a liberação do recurso, a thread libera o mutex.
Seção crítica é são trechos de código em cada thread (linha de execução independente) que acessam objetos compartilhados
Para que servem
A exclusão mútua (mutex) entra em cena quando dois threads trabalhar com os mesmos dados ao mesmo tempo. Ele atua como um bloqueio e é a ferramenta mais básica de sincronização. Quando um thread tenta adquirir um mutex, ganha o mutex, se estiver disponível, caso contrário, o segmento está definido para aguardar o recurso ser liberado. Mutex pode ser aplicada tanto em nível de hardware e software.
Os métodos de exclusão mútua
Lock
Semáforo
Monitor
Lock
Um Lock é um mecanismo de sincronização para impor limites ao acesso a um recurso em um ambiente onde há muitas threads em execução. A maioria dos projetos de lock bloqueiam a execução da thread até que seja autorizado a acessar o recurso bloqueado. A spinlock é um bloqueio onde a thread simplesmente espera ("spins") até que o bloqueio se torna disponível. É muito eficiente se tópicos só são susceptíveis de ser bloqueado por um curto período de tempo, uma vez que evita a sobrecarga de processo do sistema operacional. É um desperdício se o bloqueio é mantido por um longo período de tempo, ou se o progresso do segmento que está mantendo o bloqueio depende de preempção da linha bloqueada.
Exemplo de uso em C#
O código “lock (this)” é um