Accueil        Lexique        UNITéS        Algorithmes        Tutoriel   

Les unités de Pure Pascal (langage Pascal pour les ordinateurs de la gamme Atari ST), compatible Turbo Pascal.

Unité TOS : Fonction Psemaphore

Cette page a été ajoutée au document HLP Atari d'Origine, car manquante

Fonction Gemdos 308

Déclaration

function Psemaphore( mode : Integer; id, timeout : LongInt ) : LongInt;

Description

La fonction Psemaphore implémente des sémaphores non dénombrables. Un seul processus peut accéder à un sémaphore à la fois.

Les sémaphores peuvent être utilisés, par exemple, pour synchroniser les accès aux structures de données en mémoire partagée par différents sous-processus : un sous-processus doit donc tenter, avant d'accéder à la mémoire, de prendre possession du sémaphore. Celui-ci peut être créé lors de l'initialisation, par exemple, et supprimé à la fin du programme.
NDW, la mémoire partagée ou shared mémory, apparaitra dans le répertoire virtuel U:\SHM du système de fichier MiNT, chaque fichier virtuel étant un bloc de mémoire partagé qui sera une structure de donnée de type "Record" en langage Pascal

Les sémaphores sont identifiés par un nom. Ce nom est un mot long pouvant contenir quatre caractères ASCII. Les sémaphores dont le nom commence par un trait de soulignement « _ » sont réservés au système d'exploitation.

Le paramètre timeout est utilisé uniquement en mode 2. Les affectations suivantes s'appliquent :

  • timeout = 0 : Retour immédiat.
  • = -1 : Pas de timeout (attente indéfinie).
Les autres valeurs de timeout spécifient le délai en millisecondes avant qu'un timeout ne se produise.

Les valeurs suivantes sont possibles pour le paramètre mode :

mode Signification
0Créer un sémaphore avec l'ID id (et en attribuer la propriété au processus appelant)
1 Détruire le sémaphore avec l'ID id ; cette opération ne fonctionne que si le sémaphore appartient à l'appelant
2 Demander la propriété du sémaphore avec l'ID id ; cette opération bloque l'appelant jusqu'à ce que le sémaphore soit disponible ou qu'un délai d'attente expire
3 Libérer la propriété du sémaphore avec l'ID id ; cette opération ne fonctionne que si le sémaphore appartient à l'appelant
Remarque : Lorsqu'un processus crée un sémaphore, il en devient immédiatement propriétaire. Pour que d'autres processus puissent l'utiliser, il doit d'abord être libéré. La création d'un sémaphore nécessitant de la mémoire interne, cette fonction doit être utilisée avec parcimonie.

Si un processus bloqué attend un sémaphore (avant l'expiration du délai d'attente) et qu'un autre processus le détruit, la fonction Psemaphore renvoie le message -88 (ERANGE), car le sémaphore demandé n'existe plus.

Lorsqu'un processus se termine, tous les sémaphores dont il est propriétaire sont libérés automatiquement (mais pas détruits). La propriété d'un sémaphore ne peut pas être héritée (par exemple avec Pfork). Si un processus crée un sémaphore puis plante, celui-ci est conservé et ne peut plus être supprimé.

Dans MagiC, des contrôles de plausibilité garantissent qu'aucun sémaphore système ne peut être libéré ; de plus, seuls les modes 2 et 3 sont actuellement pris en charge.

Résultat

La fonction peut renvoyer les résultats suivants :
  • 0 (E_OK) : Aucune erreur n'est survenue
  • -1 (ERROR) (Erreur BIOS) : Un sémaphore a été demandé et est déjà détenu par l'appelant
  • -36 (EACCDN) : Tentative de création d'un sémaphore existant, l'appelant n'en est pas le propriétaire ou un dépassement de délai a eu lieu
  • -88 (ERANGE) : Le sémaphore spécifié n'existe pas

Remarque : Cette fonction est uniquement disponible sous les système d'exploitation multitâche MinT (à partir de 0.92) et MagiC (à partir de 3.0).


Vous trouverez dans cette zone la liste de toutes les Unités (équivalent des "Librairies" en C) de Pure Pascal. Les Unités indiqués comme standards existent dans la majorité des compilateurs Pascal existant sur ordinateurs 16 bits et au dela (dont Turbo Pascal 3 mini). Les unités indiqués comme Atari sont spécifiques aux systèmes d'exploitation des Atari ST (TOS n.n).

Accès aux unités

Les menus déroulants de chaque unité sont des accès directs aux procédures et fonctions, classés alphabétiquement (sans tenir compte de la casse, puisque le langage Pascal ne tient pas compte de la casse!)
CRT (Standard)

DOS (Standard)

GEM : AES (Atari)

GEM : VDI (Atari)

Graph (Standard)

Overlay (Standard)

Printer Strings (Standard)

System (Standard)

TOS : BIOS (Atari)

TOS : GEMDOS (Atari)

TOS : XBIOS (Atari)

Cette page Unités est issu du fichier UNIT.HLP de la documentation de Pure Pascal (d'Application Systems Heidelberg), qui a été convertie en format TXT puis traduite de l'Allemand grâce à Google Translator : des milliers de copier/coller de et vers Google translator ont été nécessaires, ne connaissant pas un mot d'Allemand!

Les unités CRT, DOS, Graph, Overlay, Printer et System sont standard à TOUS les compilateurs Pascal compatible avec Turbo Pascal 5. L'unité String a été introduit avec Turbo Pascal 7 (Et Pure Pascal 1.1) et permet de manipuler les chaines de caractères de type langage C. Les Unités GEM (VDI et AES) et TOS (BIOS, GEMDOS et XBIOS) sont spécifiques au système Atari ST et contiennent parfois des fonctions équivalentes à certaines fonctions des Unités générales (notamment BIOS). Les fonction XBIOS sont des fonctions permettant de tirer pleinement partie du matériel spécifique Atari, notamment Falcon (Audio, DSP, Blitter, Résolutions étendues etc)


Copyright © 2021 par Albatros Concept (Bruno Aubin)