Jump to content

Manipulieren einer Variablen durch verschiedene Events


Eggu

Empfohlene Beiträge

.. 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

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...