Jump to content

Manipulieren einer Variablen durch verschiedene Events


Recommended Posts

.. 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 to post
Share on other sites

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 to post
Share on other sites

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 to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...