정의: 한 번에 하나의 프로세스(스레드)만 리소스를 소유하도록 보호합니다.
원리: 세마포어 값이 양수이면 유휴 상태임을 의미합니다.
카테고리: 커널 세마포와 사용자 세마포, 사용자 세마포는 POXIS 세마포와 SYSTEMV 세마포로 나뉘며, POXIS 세마포는 명명된 세마포와 명명되지 않은 세마포로 구분됩니다.
커널 세마포:
#in clude
void sema_init(struct semaphore *sem, int val);
void init_MUTEX(struct semaphore *sem); //초기값 1
void init_MUTEX_LOCKED(struct semaphore *sem); // 이니셜 값 0
void down(struct semaphore *sem); //잠자기 가능
int down_interruptible(struct semaphore *sem); //중단될 수 있음
int down_trylock(struct semaphore *sem); //m 비차단 oVoid Up(구조체 세마포 *SEM)
SystemV 세마포:
#Include & LT SYS/SEM.H & GT
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 이름 없는 Semaphore
#include
sem_t sem;
int sem_init(sem_t *sem, int pshared, unsigned int val); //pshared가 0이면 공유됩니다. 스레드 간, pshared 1 상위-하위 프로세스 공유
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);
프로세스 간에 공유되는 경우 sem은 공유 메모리 영역(mmap, shm_open, shmget)에 저장되어야 합니다. 상위 프로세스의 스택은 허용되지 않습니다
POSIX 명명된 semaphore
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 *이름);
열린 각 위치는 닫고 연결을 해제해야 하지만 마지막으로 실행한 연결 해제만 적용됩니다
위 내용은 Linux의 다양한 세마포어 유형에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!