Eggu Geschrieben 6. Dezember 2021 Geschrieben 6. Dezember 2021 .. auch bekannt unter "Prozess/Thread-Synchronisation, Leser/Schreiber-Problem, Semaphore, ...): Können sich Events gegenseitig unterbrechen ? Oder werden die in eine Warteschlange eingereiht und nacheinander abgearbeitet ? Wenn ich eine gemeinsame Variable (z.B. einen Zähler) in einem Event hochzähle und im anderen runter, kann es zu Problemen kommen, wenn sich diese Schreib- bzw. Leseaktionen gegenseitig unterbrechen (da dies normalerweise nicht atomar geschieht, sondern auf ASM Ebene mehrere Befehle umschließt --> Daten-Konsistenz nicht gewährleistet). Deshalb braucht man hierfür Synchronisierungsmechanismen (Stichwort: test&set Befehl), oder man implementiert die Event-Abarbeitung eben unterbrechungsfrei (ähnlich Interrupt-Sperre auf Assembler-Ebene). --> Quell schwer zu findender Bugs gerade in Echtzeitsystemen. Wie ist das im Modellbahn-Studio gelöst ? Gruß Eggu
BahnLand Geschrieben 6. Dezember 2021 Geschrieben 6. Dezember 2021 Hallo @Eggu, mit diesem Problem hatte ich mich auch schon früher sehr intensiv beschäftigt und versucht, einen "Lock" trotz des fehlenden "Test&Set"-Befehls nachzubilden (siehe hier). Es gibt jedoch von @Neo die Aussage (schon etwas länger zurück liegend), dass Ereignisdefinitionen (die von einem Ereignis angestoßenen Aktionsfolgen) grundsätzlich nur auf einem Prozsesor abgewickelt werden und nicht durch andere Ereignisse unterbrochen werden - es sei denn, die Ereignisse provozieren selbst eine Unterbrechung (z.B. durch einen "Timer" oder eine "Verzögerung"). Vor allem bei der Verzögerung (Pausierung des Ablaufs) muss einem bewusst sein, dass der Ereignisprozess nicht über den Verzögerungszeitraum "hängen" bleibt, sondern beendet wird, und - nachdem das Ende der Verzögerung erreicht ist - ein "neues Ereignis" gestartet wird, das exakt an der Stelle hinter der Verzögerung mit den an dieser Stelle gültigen Daten aufsetzt. Damit kann in diesem speziellen Fall sehr wohl im Zeitraum dieser Verzögerung ein anderes Ereignis abgearbeitet werden. Dies gilt es zu bedenken, wenn bei einer Serialisierung von verschiedenen Abläufen Verzögerungen im Spiel sind. Viele Grüße BahnLand
Neo Geschrieben 6. Dezember 2021 Geschrieben 6. Dezember 2021 Hallo Eggu, die Ereignisverarbeitung ist single-threaded, es werden keine Ereignisse unterbrochen oder parallel ausgeführt, weshalb auch keine Synchronisation notwendig ist. Die von BahnLand angesprochenen Timer oder Verzögerungen reihen sich in die ganz normale Verarbeitungsreihenfolge ein, wie jedes andere Ereignis auch. Viele Grüße, Neo
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden