



문제 상황:
낮은 우선순위 스레드 A가 락 23을 가지고 있고, 높은 우선순위 32가 A를 기다릴 때:

스레드 B 작업을 실행하는 29는 우선순위가 32보다 낮음에도 불구하고,
실행할 수 있다.
이를 우선순위 역전(Priority Inversion) 문제라고 한다.

이를 해결 하기 위해 스레드 A 중 우선순위가 높은 32를 23에게 donate한다.

32를 donation 받은 23은 작업이 완료되면 waiting_list에 있던 32를 release 하고, ready_list로 옮긴다.


그럼 29, 32와 우선순위 중 더 높은 32가 정상 실행된다.

T1, T2, T3 기존의 priority 값을 가진 thread들이 있고,
T4가 새로 추가되었고, 그 priority가 가장 큰 값을 가질 때
T4 -> T3 -> T2 -> T1
이렇게 순차적으로 전파하는 것을 nested donation(중첩 donation) 라고 한다.
말로는 그런데...이제 코드로 구현한다는 것이 참...

그림 처럼 A, B, C 모든 락이 T1이 보유하고 있다.
그래서, 우선 순위가 더 낮은 T1 스레드가 우선 순위가 더 높은 여러 스레드로부터 donation 받는 것을 말한다.
multiple donation의 문제점
등이 발생할 수 있다고 한다.
전체적으로 간단하게 그림을 그려보고 흐름을 기억하기 위해 남긴다.