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.21.5.17 mxk_evnt_sem TOS Name: »evnt_sem« Parameter: d0 = int mode a0 = void *sem d1 = long timeout Beschreibung: Für mode sind folgende Unterfunktionen möglich: 0 SEM_FREE Semaphore freigeben (ohne Taskwechsel!) 1 SEM_SET Semaphore setzen, ggf. warten 2 SEM_TEST Eigner der Semaphore ermitteln (ggf. NULL) 3 SEM_CSET Semaphore setzen, falls nicht schon gesetzt 4 SEM_GET Semaphore ermitteln, falls Name bekannt ist. 5 SEM_CREATE Semaphore erstellen, d.h. neue einrichten 6 SEM_DEL Semaphore entfernen SEM_SET und SEM_CSET sind die einzigen Unterfunktionen, die einen Taskwechsel auslösen können. Im Gegensatz zu wind_update() kann mit diesen Aufrufen das Setzen und Freigeben von Semaphoren nicht geschachtelt werden. Versucht man, eine bereits reservierte Semaphore nochmal zu reservieren, gibt es einen Fehlercode. Beim Freigeben der Semaphore wird kein Taskwechsel durchgeführt, d.h. die Semaphore kann zwar ggf. jetzt einer anderen Applikation gehören, die den Status "ready" hat, aber sie hat noch keine Rechenzeit bekommen. Wenn die Situation unkritisch ist, sollte in jedem Fall anschließend ein appl_yield() durchgeführt werden. Die Bildschirmsemaphore hat den Namen _SCR und darf mit evnt_sem() nur mit der Unterfunktion SEM_TEST behandelt werden. SEM_CREATE setzt den Erzeuger nicht automatisch als Eigner. Dies ist nicht notwendig, weil kein Taskwechsel stattgefunden hat. Also kann bedenkenlos ein SEM_SET anschließend durchgeführt werden. SEM_DEL verlangt, daß der Löscher auch der Eigner ist. Beim Löschen werden alle wartenden Applikationen freigegeben, sie erhalten, wenn sie per evnt_sem(SEM_SET, ..) warten, eine -2 als Rückgabewert. Wer System-Semaphoren (solche, deren Namen mit '_' beginnen) löscht, ist selbst schuld. Gruppe: Kernelfunktionen Querverweis: -