Frage

Ich bin kein Anfänger in C#, aber ich muss mein Verständnis wirklich verbessern. Deshalb habe ich mir ein klassisches Deadlock-Problem zum Codieren ausgesucht, um mir einige der fortgeschritteneren Konzepte von C# beizubringen.Der Problem der Essphilosophen Scheint gut zu sein, aber ich brauche ein wenig Hilfe, um loszulegen.Ich weiß, dass ich die „Gäste“ als Objekte betrachten muss, aber um die zufälligen Verzögerungen zwischen den Mahlzeiten zu simulieren, sollte ich versuchen, jeden Gast in einem separaten Thread einzufädeln?Benötige ich eine Art „Master“, der alle Aktionen überwacht?Jeder allgemeine Ratschlag zum Designkonzept ist willkommen, aber ich würde die Grunzprogrammierung gerne als Übung durchführen.Danke!

War es hilfreich?

Lösung

Ich denke, der beste Ansatz, es zu simulieren, wäre ein Fork Klasse mit einer Methode wie use() das die Gabel hält (bool available = false) und ein release() das gibt es frei.

A Philosopher Klasse mit getFork(Fork) Und releaseFork(Fork) das das Halten/Freigeben des Objekts Fork steuert (mir scheint, ein Timer wäre in einer Methode gut useFork() damit man den Stillstand wirklich wahrnehmen kann.

Und zum Schluss a DinningTable (oder eine Klasse mit einem anderen Namen), die Instanzen erstellt, und führen Sie das Protokoll durch.Wenn Sie Threads verwenden möchten, sollten Sie hier für jeden einen Thread implementieren Philosopher Zustimmung für die Fork.

Als Vorschlag könnten Sie a implementieren Plate Klasse, hält eine Menge Spaghetti in der Hand Philosopher.useFork() Methode während des Zeitrahmens niedriger.Auf diese Weise können Sie sehen, welche Philosopher ist als Erster fertig.

Die Implementierungen übernehme ich natürlich für Sie, da Ihr Ziel darin besteht, C# zu lernen ...Meiner Erfahrung nach lernt man besser, etwas Konkretes wie diese Kurse zu machen ;) Außerdem kann man auf Google viele Implementierungen finden, wenn man schummeln möchte ...

Ich lade Sie ein, den Code danach zu teilen.Es ist eine großartige Studienreferenz.

Ich hoffe, das hilft Ihnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top