Pergunta

Em ASP clássico não é um objeto global chamado "Aplicação" que é acessado simultaniously por todas as sessões.

Como o objeto "aplicativo" é um recurso compartilhado, ele pode causar bloqueios mortos ?

EDIT: Se não, por que ele tem bloqueio e desbloqueio métodos para? Referência

Foi útil?

Solução

deadlock é diferente do normal de bloqueio . Como as páginas são processados ??em diferentes tópicos, se você quer evitar um outro pedido de modificar esse recurso compartilhado, você usa Lock, e para permitir a modificação de novo, você usa o método de desbloqueio. A coisa é, se você não usar esses métodos, outra solicitação pode alterar o valor de um item no estado do aplicativo, enquanto você está confiando em um valor antigo . Ou dois pedidos pode tentar modificá-lo simultaneamente e pode causar problemas. método de bloqueio provoca um pedido para esperar até que a aplicação do outro pedido desbloqueios; Depois disso, ele pode continuar.

bloqueio é uma situação em que segmento A fechaduras recurso 1 e esperas para recurso dois para se tornar disponível. Ao mesmo tempo, segmento B , que tem bloqueado recursos 2 precisa acessar recurso 1 (que está bloqueado por segmento a ) para continuar a trabalhar e ser capaz de liberar o recurso depois. Nesta situação, nenhum dos fios pode continuar (um deles tem que ser terminada para permitir a continuação). Este é um impasse . Application.Lock não irá causar impasses em sua própria se usado corretamente. Mas se não for usado corretamente, pode causar impasses (quando combinada com outro recurso compartilhado que as necessidades de bloqueio e impasses não são atendidos).

Outras dicas

É improvável que o bloqueio do objeto Application ASP irá resultar em um impasse que dura mais do que a configuração script de servidor de tempo limite.

O ASP objeto Application clássico tem bloquear e desbloquear para sincronizar alterações para os objetos Aplicativo. Você pode ter várias solicitações tentando fazer uma mudança para o mesmo valor -. Sem bloqueio, fazendo a mudança e, em seguida, desbloquear a mudança pode ser perdido

Como exemplo simples seria um contador de alguns tipos. Vamos dizer que seu código faz:

<%
Application("Count") = Application("Count") + 1
%>

Se você tem dois pedidos simultâneos (Req1 e req2), você poderia "perder" um sucesso página -. Efetivamente um "update faltando"

Você pode evitar isso, bloqueando a variável Application antes de atualizá-lo e desbloqueá-lo após a atualização:

<%
Application.Lock
Application("Count") = Application("Count") + 1
Application.Unlock
%>

Se Application está bloqueada enquanto outro pedido thread tenta acessá-lo, o fio irá bloquear até que o bloqueio será liberado ou o tempo limite de script for excedido.

Se você esquecer de desbloquear um bloqueio será liberado automaticamente após a página é processada ou depois do tempo limite de script for excedido.

Para mais informações, ver MSDN .

Não, nunca blocos.

Um impasse é uma situação na qual duas ações ou mais concorrentes estão esperando que o outro ao fim, e, portanto, nem sempre faz.

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