Um bloqueio exclusivo, também conhecido como bloqueio de gravação, é um tipo de bloqueio na programação simultânea que permite apenas
um Thread ou processo para acessar um recurso compartilhado a qualquer momento. Qualquer outro thread ou processo que tenta adquirir um bloqueio exclusivo nesse mesmo recurso será bloqueado até que o bloqueio seja liberado.
Aqui está um colapso:
* Exclusividade: A característica definidora. Apenas uma entidade pode segurar a fechadura de cada vez.
*
bloqueando: Os threads que tentam adquirir a fechadura quando já estão mantidos estão bloqueados (coloque -se para dormir) e não prosseguem até que a trava fique disponível.
*
Use casos: Os bloqueios exclusivos são essenciais quando as operações em um recurso compartilhado devem ser atômicas (ininterruptas) para manter a consistência dos dados. Isso é crucial em cenários, como atualizar um registro de banco de dados, modificar um arquivo ou acessar um local de memória compartilhada. Se vários threads modificarem simultaneamente os mesmos dados sem bloqueio exclusivo, os dados resultantes seriam imprevisíveis e provavelmente corrompidos.
Contraste com bloqueios compartilhados: Bloqueios exclusivos são diferentes dos bloqueios compartilhados (lida com bloqueios). Os bloqueios compartilhados permitem que vários threads * leiam * um recurso compartilhado simultaneamente, mas impedem que qualquer thread escreva para o recurso até que todos os bloqueios compartilhados sejam lançados.
Implementação: Os bloqueios exclusivos são implementados usando vários primitivos de sincronização, dependendo da linguagem e do ambiente de programação. Exemplos incluem:
*
Mutexes (exclusão mútua): Uma implementação comum em muitos sistemas operacionais e linguagens de programação.
*
semáforos: Pode ser usado para implementar bloqueios exclusivos, embora ofereçam recursos de sincronização mais gerais.
* Monitores
: Construções de nível superior que encapsulam recursos compartilhados e mecanismos de sincronização.
Exemplo (conceitual): Imagine uma conta bancária. Se vários threads tentassem retirar o dinheiro simultaneamente, sem um bloqueio exclusivo, o saldo final poderá estar incorreto. Um bloqueio exclusivo na conta garante que apenas uma operação de retirada ocorra por vez, impedindo as condições de corrida e a corrupção de dados.