[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: [reverbel-mac438] ep4 - duvida



Ae Hugo,

É mesmo! Valeu pela resposta.

Fabio M R

> Fala Fabior,
> Então. O problema de pegar saldo assim como você mostrou é o seguinte:
> Imagine dois clientes rodando:
> 'transf 100 1 2'
> e
> 'saldo 1 2'
> Suponha que ambas as contas tem 100 de saldo.
> Agora imagine que ocorre a seguinte execução:
>
> conta 1: r.lock(); c1.veSaldo(); r.unlock(); // imprime 100
>
> dae o processador suspende essa thread e põe a outra e ela roda a
> transferencia. Ela acaba e agora volta a thread antiga:
>
> conta 2: r.lock(); c2.veSaldo(); r.unlock(); // imprime 200
>
> Você pegou um estado inconsistente porque você está vendo 300 reais entre
> as duas contas sendo que na verdade só tem 200.
>
> Entendeu?
> Por isso você precisa garantir que a recuperação da informação de todos os
> saldos aconteçam sem que outras operações possam modificar o saldo.
>
> Espero ter resolvido o problema,
> Abraços,
> Hugo
>
>> Olá lista,
>>
>> O enunciado do ep4 diz que devemos usar uma estrategia para prevenir
>> deadlocks para as operacoes 'saldo' e 'transf'.
>> Para 'transf' eu entendo o problema, por exemplo no caso de 'transf
>> <quantia> 1 2' e 'transf <quantia2> 2 1'.
>> Mas Para a operacao 'saldo' nao o vejo, pois não há aquisicoes de lock
>> encaixados, por exemplo:
>>
>> 'saldo 1 2 3'
>> Seria: conta 1: r.lock(); c1.veSaldo(); r.unlock();
>>        conta 2: r.lock(); c2.veSaldo(); r.unlock();
>>        conta 3: r.lock(); c3.veSaldo(); r.unlock();
>>
>> Logo, nao vejo problema com deadlock para a operacao 'saldo'.
>>
>> Claro que posso estar enganado.
>> Alguem pode esclareceer minha duvida?
>>
>> Obrigado,
>>
>> FAbio M Reaes
>>
>>
>
>
>