"식사 철학자" 시뮬레이션 코딩을 시작하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/47707

  •  09-06-2019
  •  | 
  •  

문제

저는 C# 초보자는 아니지만 이해도를 높여야 하므로 C#의 고급 개념을 스스로 익히는 데 도움이 되도록 코드에 대한 고전적인 교착 상태 문제를 선택했습니다.그만큼 식사 철학자 문제 좋은 것 같지만 시작하려면 약간의 도움이 필요합니다."식사하는 사람"을 객체로 접근해야 한다는 것을 알고 있지만 식사 사이의 무작위 지연을 시뮬레이션하려면 별도의 스레드에서 각 식사하는 사람과의 스레딩을 찾아야 합니까?모든 작업을 모니터링하려면 일종의 "마스터"가 필요합니까?일반적인 디자인 개념에 대한 조언은 환영합니다. 하지만 저는 연습으로 그런트 프로그래밍을 하고 싶습니다.감사해요!

도움이 되었습니까?

해결책

내 생각에 그것을 시뮬레이션하는 가장 좋은 접근 방식은 Fork 다음과 같은 메소드를 사용하는 클래스 use() 포크를 쥐고 있는 것(bool available = false) 그리고 release() 그걸 풀어주는 거죠.

Philosopher 수업 getFork(Fork) 그리고 releaseFork(Fork) Fork 객체를 유지/해제하는 작업을 수행하는 것입니다(내 생각에는 타이머가 메서드에 좋을 것 같습니다). useFork() 그래서 교착상태를 실제로 인식할 수 있습니다.

그리고 마지막으로 DinningTable (또는 다른 이름) 인스턴스를 생성하고 로그를 수행하는 클래스입니다.스레드를 사용하려는 경우 여기에서 각 스레드에 대해 스레드를 구현해야 합니다. Philosopher ~에 동의하다 Fork.

제안으로 다음을 구현할 수 있습니다. Plate 클래스, 스파게티 양을 들고 Philosopher.useFork() 해당 기간 동안 방법을 낮추십시오.이렇게 하면 어느 쪽인지 알 수 있습니다. Philosopher 먼저 끝납니다.

물론 귀하의 목표는 C#을 배우는 것이기 때문에 구현을 알려드리겠습니다.내 경험상 이러한 클래스와 같은 구체적인 작업을 수행하는 것이 더 좋습니다. ;) 게다가, 속임수를 쓰고 싶다면 Google에서 많은 구현을 찾을 수 있습니다.

그 후에 코드를 공유하도록 초대합니다.훌륭한 연구 참고 자료입니다.

이것이 당신에게 도움이 되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top