Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Ausführliche Erklärung verschiedener Arten von Semaphoren in Linux

Ausführliche Erklärung verschiedener Arten von Semaphoren in Linux

PHP中文网
PHP中文网Original
2017-06-21 13:58:513598Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn