2012-04-30 2 views
2

(리눅스 등) 복수의 thread가 공통의 뮤텍스를 잠글 때, - 그것은 관찰 항상 잠금 순서, 또는 스레드 우선 순위 바이어스 스레드를 수행 임계 영역의 다음 스레드를 예약 할 때 우선 순위가 더 높습니까?POSIX 시스템의 스케줄링에 관해서 뮤텍스와 스레드 우선 순위 POSIX 시스템에서

표준에서 동작에 대해 언급하지 않습니까? 왜냐하면 내가 볼 수있는 한 필요한 인터페이스 만 언급하기 때문입니다. 여러 스레드가있는 경우

는 (.. QNX, 미닉스 등)

+0

fyscall (2) (리눅스에서 적어도) –

+0

내가 아는 한, 우리가 뮤텍스 나 세마포어를 잠그려고 시도 할 때마다 이러한 프로세스는 대기열로 보내집니다. 모든 세마포/뮤텍스에는 대기열이 있습니다. 세마포어 변수에 증가분이 있으면 FIFO 알고리즘 (Source Galvin)에 따라 큐가 검사되고 새 프로세스가 호출됩니다. 그래서 답은 이상적으로는 순서를 고정시켜야하지만 100 % 확신 할 수는 없어야합니다. –

답변

4

를 내가 (단지 리눅스) 모든 POSIX 준수 시스템에 대한 지침으로 찾고 있어요,주의, 그래서 다른 운영체제의 동작을 제안 주시기 바랍니다 이 동일한 뮤텍스를 잠 그려면 뮤텍스가 사용 가능 해지면 우선 순위가 가장 높은 스레드가 먼저 차단 해제됩니다. 복수의 thread가 같은 우선 순위를 가지는 경우, 어느 thread가 블록되어 있지 않은지는 사용 된 스케줄링 알고리즘에 의존합니다. FIFO 정책을 사용하면 가장 오래 기다렸던 쓰레드가 먼저 깨어납니다.

스레드 우선 순위와 동기화는 매우 까다로운 영역이며 우선 순위 반전으로 인해 교착 상태가 발생하지 않도록 매우주의해야합니다.

Butenhof의 의 5.5 장 POSIX 스레드를 사용한 프로그래밍은 실시간 예약을 처리합니다.

+2

그럼 우선 순위와 관련이없는 FIFO 순서에 기반한다는 것입니다. –

+0

아니요, 스레드 우선 순위가 주요 요소이며 다중 스레드가 동일한 우선 순위를 갖는다면 스케줄링 알고리즘이 어떤 스레드를 각성 시킬지를 결정합니다. – TheJuice