Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File11.18.1 Threads und Signale TOS Beim Zusammenspiel von Threads und Signalen ist folgendes zu beachten: wird ein Prozess (z.B. per SIGSTOP) angehalten, so werden auch alle zugehörigen Threads angehalten; durch das SIGCONT-Signal können alle Threads wieder aufgeweckt werden. Falls ein Prozess per SIGTERM oder SIGKILL beendet wird, werden auch alle betroffenen Threads automatisch terminiert. Die Signalbehandlung wird immer nur vom Haupt-Thread übernommen; dies ist derjenige, der mit Pexec gestartet worden ist. Während der Abarbeitung eines Signalhandlers wird deshalb auch nur der Haupt- Thread angehalten, und bei einem Aufruf von Psigreturn in diesen zurückgesprungen. Achtung: Falls mehr als ein Thread die Signalmaske manipuliert, kann es zu Unstimmigkeiten kommen, falls die Maske nicht in der richtigen Reihenfolge wieder zurückgesetzt wird. Beispiel: Thread-A rettet alte Maske Thread-A ändert Maske Thread-B rettet alte Maske Thread-A restauriert alte Maske Thread-B restauriert alte Maske In diesem Fall wird die Signalmaske ungewollt verändert. Eine Lösung dieses Problems besteht darin, jedem Thread eine eigene Signalmaske zuzuteilen, und als effektive Signalmaske die Masken aller Threads durch eine Oder-Verknüpfung zu verbinden. Möglicherweise wird das in einer späteren Version von MagiC tatsächlich der Fall sein. Querverweis: Threads in MagiC Signale shel_write Prozessfunktionen