Trabalho Prático 2014.2: Problema da Conta de Poupança

Poupança

Problema de uma Conta de Poupança 

Uma conta de  poupança é compartilhada por várias pessoas (ou seja, processos) . 

Cada pessoa pode depositar ou retirar fundos dessa conta . O saldo atual da conta é a soma de todos os depósitos até o momento menos a soma de todos os saques até o momento. 

O saldo nunca deve ser negativo, e os depósitos e as retiradas são atendidos por ordem de chegada, isto é, implementa uma política First-Come-First-Serve (FCFS).

Aqueles que querem retirar dinheiro da conta estão desesperados para conseguir seu dinheiro. Assim, se o saldo não é suficiente, então eles esperam em uma fila (em ordem FIFO) até que alguém faça um depósito em dinheiro suficiente para que ele faça o saque. 

IMPORTANTE: Note que aqueles que esperam na fila pelo depósito de outros (para que eles possam sacar) são servidos de forma estritamente FIFO. Por exemplo, suponha que o saldo atual é de 200 reais, e um cliente A está esperando para retirar 300 reais . Suponha que um outro cliente, digamos B, chega com o pedido de retirada de 100 reais . O cliente B deve esperar até que o cliente A seja atendido, isto é, que seja depositado um valor total suficiente para A sacar. 

Desenvolver um algoritmo concorrente  e um programa para resolver o problema da Conta de Poupança.

Detalhes da Implementação

Crie três processos: o Banco, Cliente Depósito e Cliente Saque que deverão funcionar concorrentemente. Os Clentes podem depositar ou sacar apenas 100 reais, 200 reais ou 300 reais.

Os cliente chegam ao banco aleatoriamente, tanto para depósito como saque, e para diversos valores, em intervalo de 2 segundos. A fila de espera para saque é infinita (muito grande). Não há fila para depósito. O cliente deve "dormir" enquanto espera na fila. 

Crie 20 clientes de cada tipo (aleatoriamente!!!!):

20 depositam 100 reais

20 depositam 200 reais 

20 depositam 300 reais  

20 retiram 100 reais

20 retiram 200 reais 

20 retiram 300 reais  

O programa deve mostrar a operação e o saldo da conta a cada instante (para mostrar que não fica negativo).

Mostrar a fila de saque (mostrando o valor da retirada do cliente).

Comments