Frage

ich habe einen Dual-Core-Prozessor-Simulator in C zu bauen (es ist eigentlich ein Multi-Level-Speicher simulation, Cache L1 / L2, Blocksubstitution, etc). Die Sache ist die, ich bin eine harte Zeit, einen Weg herauszufinden, die Kerne zu synchronisieren (was ich als Threads bin Programmierung). Irgendwelche Ideen, wie ich könnte eine globale Uhr tun? Soll ich von Threads untergeordneten Prozessen ändern? Vielen Dank im Voraus

War es hilfreich?

Lösung

So viele Möglichkeiten: da Sie vielleicht-Ende komplexe Interaktionen mit mehreren Threads unterstützen, können Sie mit einer Nachricht mit einer „virtuelle Uhr“ prüfen „Bus“ vorbei. Auf diese Weise werden Sie mehr Zeit auf der Kernfunktionalität zu konzentrieren, anstatt die synchonization Logik Debuggen ...

Mit dieser Technik können Sie eine State-Maschine bauen (siehe hier ) pro "Schauspieler" Thread (worst case) und machen sich weniger Sorgen über mutexes / Bedingungen. Sobald Sie diese Basis haben, werden Sie in der Lage sein, Fälle zu behandeln, die Mitte des Stromes zeigen (zB „ich über dieses Detail vergessen ... keine Sorgen, fügen Sie einfach einen Zustand hier ... müssen nicht erneut -shuffle meine mutexes).

Auch da Simulation tat alles über „virtuelle Zeit“ ist (da Sie nicht in Echtzeit ausgeführt werden können!), Dann auf einer „virtuelle Uhr“ zugrunde, eine Basis-Architektur abstrahiert das Problem auf ein angemessenes Niveau.

Andere Tipps

Sie könnten eine Uhr Thread plus N Prozessor-Threads. Der Takt Thread kann explizit Anrufe zu jedem Prozessor-Thread macht 1 Verarbeitungsschritt zu machen. Jeder Prozessor-Thread bekommt einen Anruf von dem Takt Thread zu doStep(); es macht einen Schritt, dann kehrt die Steuerung zu dem Takt Thread zurück.

Sie können auch die Reihenfolge zufällig in dem die Prozessor-Threads aufgerufen werden Schritte zu tun, so dass Sie wahrscheinlicher sind Fehler in Ihrem Client-Code zu fangen.

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