Bloqueando apenas um acesso por vez em uma variável de aplicação

Toda aplicação web que trabalhamos raramente pensamos na quantidade de acessos que são realizados simultaneamente em um determinado trecho de código. Um exemplo clássico é uma variável de contador de acessos/visitantes. Armazenamos o valor inicialmente em uma variável de aplicação. Depois quando um usuário acessa, é incrementado em 1. Só que se ao mesmo tempo acessar dois ou mais usuários, eles podem capturar o mesmo valor ou valor defasado e colocar a contagem errada. Veja o exemplo abaixo:


Quando tivemos o acesso simultâneo\paralelo, o valor capturado da variável da aplicação foi colhido pelos dois usuários e o valor armazenado foi comprometido. Para isso devemos bloquear o acesso à variável de aplicação e permitir apenas um usuário por vez executar a soma. Nesse caso, pode-se utilizar o seguinte trecho:


        try
        {
            Application.Lock();
            lock (this)
            {
                // Trecho a ser executado que altera uma variável de aplicação ou bloco crítico
            }
            Application.UnLock();
        }
        catch
        {
            Application.UnLock();
        }


O Application.Lock() irá bloquear o acesso de outros usuários às variáveis de aplicação e depois o Application.UnLock() libera. O lock (this) permitirá apenas o acesso de um único usuário por vez no trecho de código crítico. A combinação dos dois métodos depende muito do que estiver fazendo. Cada caso tem seu respectivo uso. O simples uso do lock (this) pode resolver... Ele é muito usado para evitar deadlocks. No mais, só isso. Recomendo dar uma lida posteriormente nos artigos abaixo:

0 comentários:

Postar um comentário