Quote by Harry
ist es überhaupt relevant, ob Interrupts oder der Scheduler noch laufen?
Wenn ... gelockt ... ist
Hallo Harry,
noch zur Erklärung:
ein "Lock" ändert nur die Stati in der Run Queue vom Scheduler.
z.B setzt ein "Lock(self)" innerhalb von Prozess_2 den Status von
Prozess_2 in der RunQueue auf "locked", die Stati von allen anderen
Prozessen auf "Wait4Unlock". Damit erhält in Zukunft nur noch Prozess_2
"seine" Rechenzeit (lt. seiner Priorität) + die unverbrauchte Zeit von allen
Tasks.
Somit ist "Lock" auch nur bei laufendem Scheduler sinnvoll.
Einen Task zu "locken" macht keinen Sinn, da dieser nach einem Tick
ohnehin abgebrochen wird. Sein Status geht dabei verloren, da er ja
wieder von Beginn an gestartet und nicht fortgesetzt wird.
Folglich hat auch jeder Prozess seinen Stack und Frame, alle Tasks
aber nur einen gemeinsamen Speicherbereich für deren Stack/Frame.
Der einzige Weg zu verhindern, dass ein Task nach 1 Tick abgeschossen
wird, ist das Multitasking ausser Kraft zu setzen.
Gruß, Gunter