RTOS 의 대표적 함정이고, 화성 탐사선 사고로 유명해진 문제다.
L (낮음) 자원을 잡고 실행 중
H (높음) 같은 자원이 필요해 대기
M (중간) 자원과 무관하게 실행 → L 을 선점한다
결과: H 가 M 때문에 계속 기다린다. 우선순위가 뒤집혔다
해법 둘
우선순위 상속 자원을 쥔 L 의 우선순위를 잠시 H 만큼 올린다
→ M 이 L 을 선점하지 못하고, L 이 빨리 끝내고 자원을 놓는다
우선순위 상한 자원마다 최고 우선순위를 정해 두고, 잡는 순간 그 값으로 올린다
대부분의 RTOS 뮤텍스가 우선순위 상속을 지원한다. 그래서 공유 자원 보호에는 세마포어가 아니라 뮤텍스를 쓰라고 하는 것이다.
실무에서 알아채는 법
"높은 우선순위 태스크의 응답 시간이 가끔 크게 튄다" 가 신호다. 평균이 아니라 최악 지연을 봐야 보이므로, 측정할 때 최댓값을 함께 기록해야 한다.