•  Back 
  •  Prozessfunktionen 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
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-File5.11.20  Psemaphore                                                TOS

 Name:         »Psemaphore« - erzeugen, anwenden, zerstören einer 
               Semaphore.

 Gemdosnummer: 308

 Deklaration:  int32_t Psemaphore ( int16_t mode, int32_t id, int32_t 
               timeout );

 Beschreibung: Die Funktion implementiert nicht-zählende Semaphore. 
               Nur ein Prozess kann einen Semaphor zur gleichen Zeit 
               besitzen.

               Semaphoren können z.B. benutzt werden, um den Zugriff 
               auf Datenstrukturen im Shared Memory von 
               unterschiedlichen Teilprozessen zu synchronisieren: So 
               muß ein Teilprozess, bevor er auf den Speicher 
               zugreift, versuchen, in den Besitzt des Semaphors zu 
               kommen. Dieser kann z.B. bei der Initialisierung 
               erzeugt, und bei Programmende wieder entfernt werden.

               Semaphore werden durch einen Namen identifiziert. 
               Dieser Name ist ein Langwort, das auch vier ASCII- 
               Zeichen enthalten kann. Semaphore, deren Namen mit dem 
               Unterstrich '_' beginnen sind dabei für das 
               Betriebssystem reserviert.

               Der Parameter timeout wird nur im Modus 2 benutzt. Es 
               gilt dabei die folgende Belegung:

                timeout  =  0: sofort zurückkehren
                         = -1: kein Timeout (Forever).

               Andere Werte für timeout geben die Wartezeit in 
               Millisekunden an, bevor ein Timeout eintritt.

               Für den Parameter mode sind folgende Werte möglich:

                mode  Bedeutung

                0     Semaphore mit Kennung id erzeugen (und 
                      besitzen).
                1     Semaphore mit Kennung id entfernen. Dies klappt 
                      nur, wenn der Aufrufer die Semaphore besitzt.
                2     Besitz der Semaphore mit Kennung id beantragen. 
                      Dies blockiert den Aufrufer bis die Semaphore 
                      frei wird, oder ein Timeout eintritt.
                3     Semaphore mit Kennung id freigeben. Dies klappt 
                      nur, wenn der Aufrufer die Semaphore besitzt.

               Hinweis: Wenn ein Prozess eine Semaphore erzeugt, 
               besitzt er sie auch sofort. Damit andere Prozesse diese 
               nutzen können, muß sie zunächst freigegeben werden. Da 
               für das Erzeugen einer Semphore interner Speicher 
               angefordert werden muss, sollte die Funktion sparsam 
               verwendet werden.

               Wenn ein blockierter Prozess auf eine Semaphore wartet 
               (bevor der Timeout eintritt), und ein anderer Prozess 
               entfernt die Semaphore, dann kehrt die Funktion 
               Psemaphore mit der Meldung ERANGE zurück, da die 
               angeforderte Semaphore nicht länger existiert.

               Wenn ein Prozess terminiert, werden alle Semaphore die 
               er besitzt, automatisch freigegeben (aber nicht 
               zerstört). Der Besitz einer Semaphore kann nicht 
               vererbt werden (etwa mit Pfork). Wenn ein Prozess eine 
               Semaphore erzeugt und dann abstürzt, bleibt die 
               Semaphore erhalten, und kann nicht mehr entfernt 
               werden.

               In MagiC sorgen Plausibilitätsüberprüfungen dafür, daß 
               keine System-Semaphoren freigegeben werden können; 
               außerdem werden z.Zt. nur die Modi 2 und 3 unterstützt.

 Ergebnis:     Die Funktion kann folgende Rückgabewerte liefern:

                E_OK  :  kein Fehler aufgetreten.
                ERROR :  es wurde eine Semaphore beantragt, die der 
                         Antragsteller bereits besitzt.
                EACCDN:  es wurde versucht eine Semaphore zu erzeugen, 
                         die bereits existiert, der Aufrufer ist nicht 
                         im Besitz der Semaphore oder ein Timeout ist 
                         eingetreten.
                ERANGE:  der angegebene Semaphor existiert nicht.

 Verfügbar:    Verfügbar, wenn ein 'MiNT' Cookie mit einer 
               Versionsnummer von mindestens 0.92 existiert und in 
               MagiC ab Version 3.0.

 Gruppe:       Prozessfunktionen

 Querverweis:  Binding   Semaphoren in MagiC