• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bountyK

Projecto com threads

5 mensagens neste tópico

Oi pessoal, é a minha primeira visita aqui, e espero dar-me bem!!!

Há uma coisa que me anda a moer a cabeça: tenho um projecto em que tenho de usar técnicas de sincronização/comunicação entre threads (ou processos). Consiste na simulação de um aeroporto, em que temos vários aviões a chegar e a partir,com uma torre de controlo para atribuir as diversas portas de embarque e desembarque, bem como as pistas, que podem ser usadas tanto para aterragens como para descolagens.

Ora bem, a dúvida é apenas a seguinte: deverá ser a classe representativa do avião a classe que irá fazer o extends da thread, ou outra classe fará isso?

Por favor,apenas uma achega, tou a partir o miolo  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na minha forma de ver o exercício, tendo em conta que não dizes como é feita a comunicação entre os elementos, avião e torre de controlo, a torre de controlo será um conjunto de threads. Imagina que o aeroporto consegue atender 50 aviões de cada vez. A torre será assim composta por várias threads, neste caso 50, e sempre que chegar um avião uma dessas 50 threads irá ser indicada para tratar os dados do avião. Quando todas as threads estiverem ocupadas então não poderás tratar mais aviões e terás de colocar os que chegarem e lista de espera.

Assim ficas com o objecto TorreControlo que não estende de Thread mas que contém, seguindo o exemplo dos 50 aviões, 50 objectos, TrataAviao, e um outro objecto, ControloDeEspera, que será usado para periódicamente verificar a lista de aviões em espera e atribuir alguma TrataAviao que esteja livre para tratar os aviões.

Tens assim dois momentos, por um lado tens o aviso de chegada de um novo avião, onde verificas se existem TrataAviao livres e, caso existam associas ao avião, caso não existam envias esse avião para a lista de espera. Outra momento será a thread ControloDeEspera que irá verificar a lista de aviões em espera e, novamente, caso exitam TrataAviao livres vai despachar os aviões.

Estes dois casos podem ser reduzidos a um em que todos os aviões vão para a lista de espera, independentemente de existirem lugares vagos.

Como não dizes como é a comunicação entre aviões e torres, ou melhor, não dizes como é que é introduzido um avião, assumi que é apenas um método da TorreControo. Por isso removi-os da equação das threads :P

Resumindo: Um objecto TrataAviao e um objecto ControloDeEspera que estendem de Thread

Espero que ajude e não confunda mais :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa, esqueci-me de referir o método de controlo.Obrigado pela resposta rápida.

Há uma torre de controlo que controla as pistas(são 2,servem as duas para aterrar e descolar) e os aviões propriamente ditos. Há uma fila de embarque/desembarque para 5 aviões no máximo.Podem estar no máximo cinco aviões à espera de porta na fila para

chegadas e cinco aviões à espera de pista para descolar na fila para partidas,fazendo duas filas de espera no total.

Não percebo como representar as pistas.

E tive a pesquisar, será que a classe SynchronousQueue servirá para o que eu pretendo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As pistas poderão ser as threads, imagina que tens apenas 2 threads para controlar aterragens e descolagens, se essas threads estiverem ocupadas então as pistas estão ocupadas. Não estou a ver necessidade de outra estrutura, mas podes também criar um fila de espera que simule as pistas... no entanto do que estou a perceber parece-me informação duplicada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A classe SynchronousQueue que referi serviria,penso eu, para as filas de espera dos aviões.

Mas já estou a perceber o raciocínio. Obrigado pela ajuda!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora