Definition: Gemeinsame Ressourcen schützen, sodass jeweils nur ein Prozess (Thread) die Ressource besitzt
Prinzip: Wenn der Semaphorwert positiv ist, bedeutet dies, dass er inaktiv ist, wenn er 0 oder negativ ist, es bedeutet, dass es belegt ist
Klassifizierung: Kernel-Semaphor und Benutzer-Semaphor, Benutzer-Semaphor ist in POXIS-Semaphor und SYSTEMV-Semaphor unterteilt, POXIS-Semaphor ist in benanntes Semaphor und unbenanntes Semaphor unterteilt
Kernel-Semaphor:
#include
void sema_init(struct semaphore *sem, int val);
void init_MUTEX(struct semaphore *sem); //Anfangswert 1
void init_MUTEX_LOCKED(struct semaphore *sem); //Anfangswert 0
void down(struct semaphore *sem); //Kann schlafen
int down_interruptible(struct semaphore *sem); //Kann unterbrochen werden
int down_trylock(struct semaphore *sem); //m nicht blockierend
void up(struct semaphore *sem);
SYSTEMV-Semaphor:
#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,...);
POSIX unbenanntes Semaphor
#include
sem_t sem;
int sem_init(sem_t *sem, int pshared, unsigned int val); //Wenn pshared 0 ist, wird es gemeinsam genutzt threads, pshared Wenn es 1 ist, teilen sich die übergeordneten und untergeordneten Prozesse
int sem_wait(sem_t *sem); //Blocking
int sem_trywait(sem_t *sem); / /non-blocking
int sem_post(sem_t *sem);
int sem_destroy(sem_t *sem );
Für die gemeinsame Nutzung zwischen Prozessen muss sem im gemeinsam genutzten Speicherbereich (mmap, shm_open, shmget) in den globalen Variablen, im Heap und im Stapel des übergeordneten Elements platziert werden Prozess ist nicht akzeptabel
POSIX benanntes Semaphor
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) ;
each Die Position „offen“ erfordert Schließen und Aufheben der Verknüpfung, aber nur die zuletzt ausgeführte Aufhebung der Verknüpfung wird wirksam
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung verschiedener Arten von Semaphoren in Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!