728x90
반응형
SMALL
뮤텍스와 세마포어의 특징, 차이에 대한 정리
SMALL
임계 영역(Critical Section)
함수 내에 둘 이상의 스레드가 동시에 실행하면 문제를 일으키는 하나 이상의 문장으로 묶여있는 코드블록
쓰레드 동기화
- 동일한 메모리 영역으로 동시 접근이 발생하는 상황에 필요
- 동일한 메모리 영역에 접근하는 쓰레드의 실행 순서를 지정해야 하는 상황에 필요
뮤텍스(Mutex)
Mutual Exclution
임계영역에 여러 쓰레드의 동시접근을 허용하지 않는 기술
동기화 대상이 하나일때 사용
하기 두 함수를 통해 임계영역 보호
- pthread_mutex_lock(pthread_mutex *mutex)
- pthread_mutex_unlock(pthread_mutex *mutex)
pthread_mutex_lock(&mutex);
// 임계 영역 시작
// ...
// 임계 영역 끝
pthread_mutex_unlock(&mutex)
임계 영역의 시작과 끝을 감싸 사용 쓰레드가 임계영역을 빠져나갈 때까지 블로킹
* unlock이 호출 되지 않았을 때, lock 함수가 블로킹 상태에서 빠져나가지 못하는 Dead-Lock 상태에 주의해야 함
세마포어(Semaphore)
임계영역에 여러 프로세스, 쓰레드의 동시접근을 허용하지 않는 기술
접근 순서를 동기화 해야할때 사용
동기화 대상이 하나 이상일때 사용
하기 두 함수를 통해 임계영역 보호
- sem_post(sem_t *sem) 가 호출되면 세마포어 +1
- sem_wait(sem_t *sem) 가 호출되면 세마포어 -1(세마포어 값은 0보다 작아질 수 없음)
sem_wait(sem_t *sem);
// 임계 영역 시작
// ...
// 임계 영역 끝
sem_post(sem_t *sem);
wait 호출 시 세마포어 값이 0이 되며 post가 불리기 전까지 다른 쓰레드에서 임계영역 진입을 막음
뮤텍스 & 세마포어 차이
- 동기화 대상의 개수 - 뮤텍스 : 1개, 세마포어 : 1개 이상
- 뮤텍스는 소유하고있는 쓰레드만이 뮤텍스 해제 가능, 세마포어는 다른 쓰레드가 세마포어 해제 가능
- 뮤텍스는 자원을 소유할 수 있고, 책임을 가지는 반면 세마포어는 자원 소유가 불가
728x90
반응형
LIST
'OS > All' 카테고리의 다른 글
[OS] 메모리 구조(stack, heap) (0) | 2023.09.08 |
---|---|
[OS] 빅 엔디안 & 리틀 엔디안 (0) | 2023.09.05 |
[ETC] CRLF / LF /CR (0) | 2023.07.21 |
[OS] 프로세스(Process)/스레드(Thread) (0) | 2023.06.25 |