Temps Réel : Sémaphore Promotion Social – E. Benitez Sommaire Définition Nommé et Non-nommé : Différence Sémaphore Nommé : Fonction Définition Résolve les problèmes de coopération et de compétition Synchronisation : Attente d’un processus Exclusion mutuelle : Gestion de ressource Définition Un sémaphore est un entier non négatif qui peut uniquement être modifier par les opérateur signal et wait. Signal : incrémente de 1 le sémaphore Wait : décrémente de 1 le sémaphore Lorsque le sémaphore est nulle. Le demandeur doit attendre que le sémaphore soit incrémenté Blocage du processus Nommé et Non-nommé : Différence Nommé : Porte un nom Connu dans tous l’OS Persiste à la fin du programme Non-nommé : Possède un identificateur Hérité par fork Détruit à la fin du programme Sémaphore Nommé : Fonction 1. Création sem_t * sem_open(const char *name, int oflag, mode_t mode, unsigned int value); name : Nom du sémaphore oflag : mode accès du sémaphore Pour la création : O_CREAT | O_RDWR Pour l’ouverture : O_RDWR mode : droite d’accés du sémaphore=> 0744 Valeur de retour : -1 : Erreur (utilisation de errno) Autre : identifiant du sémaphore Sémaphore Nommé : Fonction 2. Incrémentation int sem_post(sem_t *sem); sem : identifiant du sémaphore Valeur de retour : -1 : Erreur (utilisation de errno) 3. Décrémentation int sem_wait(sem_t *sem); ou int sem_trywait(sem_t *sem); sem : identifiant du sémaphore Valeur de retour : -1 : Erreur (utilisation de errno) Sémaphore Nommé : Fonction 5. Fermeture int sem_close(sem_t *sem); sem : identifiant du sémaphore Valeur de retour : -1 : Erreur (utilisation de errno) 6. Destruction int sem_unlink(const char *name); nom : Nom du sémaphore Valeur de retour : -1 : Erreur (utilisation de errno) Sémaphore Non-Nommé : Fonction 1. Création sem_t * sem_init(sem_t *sem, int pshared, unsigned int value); sem : Identifiant du sémaphore à initialisé pshared : partage avec d’autre processus Valeur : 1 value : Valeur initiale du sémpahore (>=0) Valeur de retour : -1 : Erreur (utilisation de errno) Sémaphore Non-Nommé : Fonction 2. Incrémentation int sem_post(sem_t *sem); sem : identifiant du sémaphore Valeur de retour : -1 : Erreur (utilisation de errno) 3. Décrémentation int sem_wait(sem_t *sem); ou int sem_trywait(sem_t *sem); sem : identifiant du sémaphore Valeur de retour : -1 : Erreur (utilisation de errno) Sémaphore Non-Nommé : Fonction 5. Fermeture int sem_destroy(sem_t *sem); sem : identifiant du sémaphore Valeur de retour : -1 : Erreur (utilisation de errno)