다음을 통해 공유


우선 순위 반전

우선 순위 반전이라고 하는 현상은 우선 순위가 낮은 스레드가 보유한 리소스를 기다리는 동안 우선 순위가 높은 스레드가 무한정 지연될 때 발생하며, 관련 없는 중간 우선 순위 스레드가 있기 때문에 진행할 수 없습니다. 그 결과 우선 순위가 높은 스레드는 우선 순위가 중간으로 더 낮은 스레드에 의해 CPU에 대한 액세스가 효과적으로 거부됩니다.

예를 들어, 우선 순위 4에서 실행되는 스레드 T1은 잠금을 획득한 후 우선 순위가 8로 우선 순위가 더 높은 스레드 T2에 의해 선점됩니다. 이후 우선 순위가 12인 스레드 T3이 도착하여 T2를 선점하고 T1이 보유한 잠금을 획득하려고 하다가 차단됩니다. 이 지점에서 T1과 T2 모두 실행할 준비가 되었지만 T2의 우선 순위가 더 높아 T1이 잠금을 실행하고 해제하지 못하기 때문에 우선 순위가 더 높은 스레드인 T3이 진행되지 않도록 계속 실행됩니다.

스레드 스케줄러는 AutoBoost라는 기능을 통해 이 문제를 해결합니다. AutoBoost는 자동으로 리소스 예약을 추적하고 스레드가 절대 아래로 떨어지지 않아야 하는 우선 순위 층을 적용하여 스레드 우선 순위를 조정합니다. 예를 들어, 우선 순위가 낮은 스레드가 중요한 섹션을 획득하고 우선 순위가 높은 스레드가 차단되어 중요한 섹션을 기다리면 리소스를 해제할 때까지 소유자의 우선 순위가 대기자의 최대 우선 순위로 높아집니다.