일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 게임개발
- gameplay tag
- 보안
- level design
- attribute
- local prediction
- photon fusion2
- widget
- Multiplay
- os
- MAC
- UI
- rpc
- animation
- Replication
- gameplay effect
- CTF
- 유니티
- unity
- gas
- listen server
- 언리얼엔진
- Unreal Engine
- 언리얼 엔진
- gameplay ability system
- 게임 개발
- Aegis
- ability task
- stride
- C++
- Today
- Total
Replicated
[OS] Mutex & Semaphore (and Condition Variable) 본문
뮤텍스
한 번에 하나의 스레드만 임계 영역에 진입할 수 있도록 하는 락 메커니즘
특징
- 이진 상태(잠금, 해제)로 동작
- 뮤텍스를 소유한 스레드만 해제할 수 있음
- 주로 단일 리소스 보호에 사용
세마포어
지정한 수의 스레드가 동시에 임계 영역에 진입할 수 있도록 허용하는 카운터 기반의 동기화 도구
특징
- 정수 값을 가지며, 공유 자원의 개수를 나타냄
- 스레드는 세마포어의 값을 감소시키며 진입, 작업이 끝나면 값을 증가시켜 다른 스레드가 진입할 수 있도록 함
- 뮤텍스보다 더 일반적인 형태의 동기화 도구
그럼 조건 변수(Condition Variable)는?
락은 상호 배제를 위해, 조건 변수는 동기화를 위해 사용함
int done = 0;
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t c = PTHREAD_COND_INITIALIZER;
void thr_exit() {
pthread_mutex_lock(&m);
done = 1;
pthread_cond_signal(&c);
pthread_mutex_unlock(&m);
}
void *child(void *arg) {
printf("child\n");
thr_exit();
return NULL;
}
void thr_join() {
pthread_mutex_lock(&m);
while( done == 0 )
pthread_cond_wait(&c, &m);
pthread_mutex_unlock(&m);
}
int main(int argc, char *argv[]) {
printf("parent: begin\n");
pthread_t p;
pthread_create(&p, NULL, child, NULL);
thr_join();
printf("parent: end\n");
return 0;
}
wait 앞뒤로 락을 해줌
https://lagooneng.tistory.com/120
조건 변수, 생산자/소비자 문제
락은 상호배제를 위해서 조건변수는 동기화를 위해서 void *child(void *arg) { printf("child\n"); return NULL; } int main(int argc, char *argv[]) { printf("parent: begin\n"); pthread_t c; pthread_create(&c, NULL, child, NULL); printf("par
lagooneng.tistory.com
복잡한 상태 기반으로, 조건적으로 논리의 흐름을 제어할 수 있음
또한, 자원의 표현을 조건 자체로 함
세마포어는 자원을 개수 단위로 표기 가능
제한된 수의 리소스를 관리하기 위해 사용 가능
그럼 이진 세마포와 그냥 락의 차이는 무엇인가?
이진 세마포는 0과 1의 값을 가지는 세마포어
간단한 동기화가 가능하고 뮤텍스처럼 사용 가능
그럼 세마포는 다 되는 건가?
이건 좀 애매함
뮤텍스도 되고, 조건 변수도 되고 카운팅은 오히려 조건 변수보다 나음
단, 문제가 조금 있음
1. 뮤텍스로 쓸 경우, 세마포는 소유한다는 개념이 아니라 풀어버릴 수 있음
2. 코드 가독성 저하. 다 할 수 있으니까 뭐 하는 건지 파악이 안됨
3. 조건 표현 부족. 조건 변수의 while(state variable)로 논리 표현이 가능하나, 세마포는 그냥 숫자
4. 고급 제어의 어려움
이런 문제가 있는 듯
'지식' 카테고리의 다른 글
[Graphics] Forward Rendering과 Deferred Rendering (0) | 2025.05.30 |
---|---|
[Graphics] 그래픽스 트러블 슈팅 (0) | 2025.05.30 |
[Graphics] 텍스처, 실시간 그림자 처리 (0) | 2025.05.30 |
[Graphics] 그래픽스 성능 최적화 (0) | 2025.05.30 |
[Graphics] 좌표 변환 및 카메라 처리 (0) | 2025.05.30 |