Maison >Opération et maintenance >exploitation et maintenance Linux >Explication détaillée des différents types de sémaphores sous Linux
Définition : Protéger les ressources partagées afin qu'un seul processus (thread) possède la ressource à la fois
Principe : Lorsque la valeur du sémaphore est positive, cela signifie qu'il est inactif, si elle est 0 ou négative, cela signifie qu'il est occupé
Classification : sémaphore noyau et sémaphore utilisateur, le sémaphore utilisateur est divisé en sémaphore POXIS et sémaphore SYSTEMV, le sémaphore POXIS est divisé en sémaphore nommé et sémaphore sans nom
Sémaphore noyau :
#include
void sema_init(struct semaphore *sem, int val);
void init_MUTEX(struct semaphore *sem); //Valeur initiale 1
void init_MUTEX_LOCKED(struct semaphore *sem); //Valeur initiale 0
void down(struct semaphore *sem); //Peut dormir
int down_interruptible(struct semaphore *sem); //Peut être interrompu
int down_trylock(struct semaphore *sem); //m non bloquant
void up(struct semaphore *sem);
Sémaphore SYSTEMV :
#include
int semget(key_t key, int nsems, int oflag);
int semop(int semid, struct sembuf *opsptr, size_t nops);
int semctl(int semid , int semum, int cmd,...);
Sémaphore POSIX sans nom
#include
sem_t sem;
int sem_init(sem_t *sem, int pshared, unsigned int val) //Si pshared vaut 0, il est partagé entre threads, pshared S'il vaut 1, les processus parent et enfant partagent
int sem_wait(sem_t *sem); //Blocking
int sem_trywait(sem_t *sem); / /non bloquant
int sem_post(sem_t *sem);
int sem_destroy(sem_t *sem); );
Pour le partage inter-processus, sem doit être placé dans la zone de mémoire partagée (mmap, shm_open, shmget Stockage dans les variables globales, le tas et la pile du parent). le processus n'est pas acceptable
POSIX nommé sémaphore
sem_t *sem_open(const char *name, int oflag, mode_t mode, int val);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem);
int sem_close(sem_t *sem);
int sem_unlink(const char *name) ;
chacun La position d'ouverture nécessite de fermer et de dissocier, mais seule la dernière dissociation exécutée prend effet
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!