본문 바로가기
한국으로/임베디드 리눅스

4.2 스레드 동기화

by 영킴. 2018. 6. 28.

4.2 스레드 동기화

4.2.1 뮤텍스 함수

int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutex_attr attr);

기능: 뮤텍스 초기화

int pthread_mutex_lock(pthread_mutex_t* mutex);

기능: 뮤텍스 획득

int pthread_mutex_unlock(pthread_mutex_t* mutex);

기능: 뮤텍스 반납

int pthread_mutex_destroy(pthread_mutex_t* mutex);

기능: 뮤텍스 비활성화

<공통>
리턴: 성공 시 0, 에러 시 에러번호 리턴
mutex: 뮤텍스 변수 주소
attr: 뮤텍스 속성 (일반적으로 NULL)




4.2.2 POSIX 이름있는 세마포어

세마포어 파일을 매개로 동기화 구현 (프로세스 간 동기화에 주로 사용)

sem_t* sem_open(const char* name, int oflag);

sem_t* sem_open(const char* name, int oflag, mode_t mode, unsigned int value);

기능: 세마포어 새로 생성 또는 기존 세마포어 열기
리턴: 성공 시 세마포어 주소, 실패 시 errno 설정 후 SEM_FAILED 리턴

int sem_close(sem_t* sem);

기능: 세마포어 닫기

int sem_unlink(const char* name);

기능: 세마포어 제거

int sem_wait(sem_t* sem);

기능: 세마포어 획득

int sem_post(sem_t* sem);

기능: 세마포어 반납


<공통>
리턴: 성공 시 0, 실패 시 errno 설정 후 SEM_FAILED 리턴
name: 세마포어 파일, /로 시작하는 이름
oflag: O_CREAT, O_EXCL 등



4.2.3 POSIX 이름없는 세마포어

세마포어 변수를 매개로 동기화 구현 (스레드 간 동기화에 주로 사용)

int sem_init(sem_t* sem, int pshared, unsigned int value);

기능: 세마포어 초기화

int sem_wait(sem_t* sem);

기능: 세마포어 획득

int sem_post(sem_t* sem);

기능: 세마포어 반납

int sem_destroy(sem_t* sem);

기능: 세마포어 비활성화


<공통>

리턴: 성공 시 0, 에러 시 errno 설정 후 -1 리턴

sem: 세마포어 변수 주소

pshared: 0인 경우 스레드 간 공유, 0이 아닌 경우 프로세스 간 공유를 의미

value: 세마포어 초기 값



'한국으로 > 임베디드 리눅스' 카테고리의 다른 글

5.4 파일시스템  (0) 2018.07.01
5.3 메모리 관리  (0) 2018.06.29
5.2 시스템 콜  (0) 2018.06.28
5.1 프로세스 관리  (0) 2018.06.28
4.1 스레드란?  (0) 2018.06.27
3.4 메시지 큐  (0) 2018.06.27
3.3 공유 메모리  (0) 2018.06.27
3.2 세마포어  (0) 2018.06.27