Tôi không phải là người mới bắt đầu tại C# nhưng tôi thực sự cần phải tăng hiểu biết của mình, vì vậy tôi đã chọn một vấn đề bế tắc cổ điển để viết mã giúp tự học một số khái niệm C# cao cấp hơn. Các Dining Philosophers Problem có vẻ như là một tốt, nhưng tôi cần một chút giúp đỡ để bắt đầu. Tôi biết tôi cần phải tiếp cận "thực khách" như các đối tượng, nhưng để mô phỏng sự chậm trễ ngẫu nhiên giữa việc ăn uống, tôi có nên tìm kiếm luồng với mỗi quán ăn trong một chủ đề riêng biệt không? Tôi có cần một loại "chủ nhân" để theo dõi tất cả các hành động không? Bất kỳ lời khuyên khái niệm thiết kế chung được chào đón, nhưng tôi muốn làm các lập trình grunt như một bài tập. Cảm ơn!Làm thế nào để bắt đầu viết mã mô phỏng "Các nhà triết học ăn uống"?
Trả lời
Tôi nghĩ rằng cách tiếp cận tốt nhất để mô phỏng nó sẽ là một lớp Fork
với một phương pháp như use()
chứa fork (bool available = false
) và một release()
đó phát hành nó.
Một lớp Philosopher
với getFork(Fork)
và releaseFork(Fork)
mà hoạt động các tổ chức/phát hành của đối tượng Fork (Dường như với tôi một bộ đếm thời gian sẽ là tốt trong một phương pháp useFork()
vì vậy bạn có thể thực sự cảm nhận được thế bế tắc.
Và đối với một cuối DinningTable
(hoặc bất kỳ tên khác) lớp mà tạo ra các trường hợp, và làm nhật ký. Nếu bạn có kế hoạch để sử dụng chủ đề, đây là nơi mà bạn nên thực hiện một chủ đề cho mỗi Philosopher
concurring cho Fork
.
Như một gợi ý, bạn có thể triển khai lớp học Plate
, giữ một lượng spaghetti mà phương pháp Philosopher.useFork()
thấp hơn trong khung thời gian. Bằng cách này, bạn có thể xem Philosopher
kết thúc trước tiên.
Tôi sẽ cho phép triển khai cho bạn, tất nhiên, vì mục tiêu của bạn là học C# ... trong kinh nghiệm của mình, bạn nên học cách làm cụ thể như các lớp này;) Bên cạnh đó, bạn có thể tìm thấy nhiều triển khai trên Google nếu bạn muốn lừa ...
Tôi mời bạn chia sẻ mã sau đó. Đó là một tài liệu tham khảo học tập tuyệt vời.
Hy vọng Điều này sẽ giúp bạn.
Hmmm ... Tôi có thể mô hình hóa "thực khách" làm chủ đề ... mặc dù chúng có thể là các chủ đề bao bọc các đối tượng. – paxos1977