A. 이벤트와 조건 변수
1. 이벤트 (승무원부탁)
a. 사용하게 되는 이유
매니저에 접근할때 락을걸로 작업하면 됨
스레드를 이리저리 배치해서 운영하면
생성, 소모에 따라서 배치를 하게 됨
먼저 mutex 생성
일감은 queue에 넣어주기
sleep_for는 얼마만큼 쉬어야 하는지를 나타냄
반대로 producer와 반대로 일함
정보가 들어있으면, 꺼내서 출력하기
나중엔 위 방식에서 네트워크 통신을 잡아서 넣어주게 됨
위 방식에서 아쉬운건 락을 걸고 어떤 행위를 하고 있음
데이터가 없어도 스핀락처럼 계속 우회하고 있음
👉 해결방법은 스핀락, 위에서 사용한 sleep_for, 승무원한테 부탁하기
승무원한테 부탁하는건 이벤트를 활용하는 것임
b. 이벤트 :: 커널 오브젝트
🌟 커널 오브젝트 :: 운영체제가 관리하는 오브젝트
사용하는 방법은 아래와 같음
커널 오브젝트는 다른 프로그램에서도 동기화해서 만들수도 있음 (참고만)
프로듀서쪽에서 파란불 켜주기
일감이 있을 확률에만 깨어나서 작동을 하게 됨
이렇게 스핀락을 이벤트처리로 해버리면 불필요한걸 예방하게 되고
cpu부하가 낮아지게 된다!
💥 이벤트의 단점
1) 비용 문제가 있음 (너무 많이 사용하게 되면 안됨)
2) 1:1 방식으로 생성,소비가 아닌 1:n 방식으로 되면, 락에 걸려서 다른 방식으로 소비될 수 없음
3) 사실 작업할 때 굳이 이벤트까지 갈 필요가 없어짐
2. 조건 변수
a. condition_variable :: 유저레벨 오브젝트
이것도 이벤트와 비슷하게 어떤 상황이 되는걸 기다린다
조건에 만족하면~ 아래를 실행, 아니면 락을 풀고 잠들게 됨 (유니크 락 사용이유)
'운영체제' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 스마트 포인터 (0) | 2024.12.05 |
---|---|
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 락 기초, 스핀락, 데드락 (0) | 2024.12.03 |
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 공유자원 (0) | 2024.12.03 |
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 캐시와 CPU 파이프라인 (1) | 2024.12.03 |
[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 쓰레드 (1) | 2024.12.02 |