Pergunta

Não sou iniciante em C#, mas realmente preciso aumentar meu conhecimento, então escolhi um problema de impasse clássico para codificar para ajudar a aprender alguns dos conceitos mais avançados de C#.O Problema dos Filósofos de Jantar parece uma boa, mas preciso de uma ajudinha para começar.Eu sei que preciso abordar os "comensais" como objetos, mas para simular os atrasos aleatórios entre as refeições, devo procurar encadear cada comensal em um encadeamento separado?Preciso de algum tipo de “mestre” para monitorar todas as ações?Qualquer conselho geral de conceito de design é bem-vindo, mas eu gostaria de fazer a programação pesada como um exercício.Obrigado!

Foi útil?

Solução

Acho que a melhor abordagem para simular isso seria Fork classe com um método como use() que segura o garfo (bool available = false) e um release() isso libera.

A Philosopher aula com getFork(Fork) e releaseFork(Fork) que opera a retenção/liberação do objeto Fork (me parece que um temporizador seria bom em um método useFork() então você pode realmente perceber o impasse.

E por último um DinningTable (ou qualquer outro nome) classe que cria instâncias e faz o log.Se você planeja usar threads, aqui é onde você deve implementar um thread para cada Philosopher concorrendo para o Fork.

Como sugestão, você poderia implementar um Plate Classe, segurando uma quantidade de espaguete que a Philosopher.useFork() método mais baixo durante o período.Dessa forma você pode ver qual Philosopher termina primeiro.

Vou deixar as implementações para você, claro, já que seu objetivo é aprender C#...na minha experiência, é melhor você aprender fazendo algo concreto como essas aulas ;) Além disso, você pode encontrar muitas implementações no Google se quiser trapacear ...

Convido você a compartilhar o código depois dele.É uma ótima referência de estudo.

Espero que isso ajude você.

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