뮤텍스 초기화(두 가지 방법)
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- Parameter
- mutex:mutex instance
- attr:mutex 속성(일반적으로 NULL, NULL로 초기화할 경우 하단 초기화 구문과 같음)
- Return
뮤텍스 락/언락
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
뮤텍스 락 여부 확인
int pthread_mutex_trylock(pthread_mutex_t *mutex);
- Parameter
- Return
- 다른 스레드가 lock을 점유했을 경우:
- lock(): sleep -> lock을 점유했을 때 리턴
- trylock(): 곧바로 errno 리턴 후 코드 실행
세마포
- unnmaed sempaphore
- 공유 메모리에 대한 동기화 수행 시 활용
- 공유 메모리의 일부를 세마포로 간주, 접근
- named semaphore
- 일반적인 자원에 대한 동기화 수행 시 활용
- (세마포에 ID를 부여) 세마포를 파일과 같이 간주, 접근
- unnmaed sempaphore
- sem_init(), sem_destroy()
- named semaphore
- sem_open(), sem_close(), sem_unlink()
- unnamed semaphore & named semaphore
- sem_wait(), sem_trywait(), sem_timedwait(), sem_post()
unnamed semaphore:초기화
int sem_init(sem_t *sem, int pshared, unsigned int value);
- Parameter
- sem:초기화할 세마포 객체 포인터
- pshared:공유 옵션(0일 경우 프로세스 내 스레드 간 공유, 1일 경우 프로세스 간 공유)
- value:세마포 초기값
- Return
unnamed sempahore:해제
int sem_destory(sem_t *sem);
named semaphore: 생성/열기
sem_t *sem_open(const char *name, int oflag); 열기
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value); 생성하기
- Parameter
- name:세마포 ID(슬래시로 시작: e.g./sempahoreid)
- oflag:O_CREAT(세마포 생성) 혹은 O_EXCL(중복된 이름의 세마포 체크)
- mode: 권한
- value: 세마포 초기값
- Return
- 성고시 sempahore 포인터
- 실패시 SEM_FAILED
named semaphore: 닫기
int sem_close(sem_t *sem);
named semaphore: 삭제
int sem_unlink(const char *name);
- Parameter
- Return
- 모든 프로세스가 semaphore를 닫아야 삭제
unnamed & named semaphore:세마포 자원 요청
int sem_wait(sem_t *sem); 공유 자원에 접근할 임계 구역을 실행하고 싶을때
- Parameter
- Return
- semaphore value 1 감소, 0 이하일 경우 block
unnamed & named semaphore: 세마포 자원 요청 시도
int sem_trywait(sem_t *sem); blocking 없이 자원 요청, 즉시 반환
unnamed & named semaphore:세마포 자원 요청 시도(타임아웃 조건부)
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
- Parameter
- sem:요청할 세마포 객체
- abs_timeout:timeout 설정값
- Return
unnamed & named semaphore:세마포 자원 해제
int sem_post(sem_t *sem);
- Parameter
- Return
- semaphore value 1증가, 0 이상일 경우 blocked된 프로세스/스레드 깨어남