bountyK Posted January 14, 2007 at 04:17 PM Report #76213 Posted January 14, 2007 at 04:17 PM 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
Knitter Posted January 14, 2007 at 06:15 PM Report #76238 Posted January 14, 2007 at 06:15 PM 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 😛 Resumindo: Um objecto TrataAviao e um objecto ControloDeEspera que estendem de Thread Espero que ajude e não confunda mais 👍
bountyK Posted January 14, 2007 at 06:23 PM Author Report #76239 Posted January 14, 2007 at 06:23 PM 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?
Knitter Posted January 14, 2007 at 06:33 PM Report #76243 Posted January 14, 2007 at 06:33 PM 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.
bountyK Posted January 15, 2007 at 05:02 PM Author Report #76446 Posted January 15, 2007 at 05:02 PM 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!!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now