2011-11-11 1 views
2

Java의 실시간 사양은 우선 순위 상속 및 우선 순위 상한 프로토콜과 같은 우선 순위 반전을 처리하기위한 도구를 제공함을 나타냅니다.실시간 Java가 우선 순위 반전을 피하는 방법

On POSIX 는 프로토콜을 설정할 수 있습니다 pthread_mutexattr_getprotocol 내가 실시간 자바에 대한이의 equivalance에 대해 궁금이

PTHREAD_PRIO_NONE 
PTHREAD_PRIO_INHERIT //(PIP) 
PTHREAD_PRIO_PROTECT //(PCP) 

를 해결하는 데있다.

감사합니다.

+0

실시간 고려 사항을 프로그래밍 할 때 처음부터 문제가되지 않도록 응용 프로그램을 설계하는 경향이 있습니다. 예 : 스레드 로컬 상태 만 사용합니다. –

+0

제발 좀 더 자세히 설명해 주실 수 있습니까? 'WaitFreeReadQueue' 객체들에 대해 잘 알고 있습니까? – 0xFF

+0

이것은 Queue.poll() 및 BlockingQueue.take()와 동일한 기능을 제공하는 것으로 보입니다. RTSJ에만있는 기능 중 일부는 수년 동안 OpenJDK에 추가되었습니다. ;) 개인적으로 나는 큐를 사용하여 쓰레기를 최소화하는 것을 피합니다 (객체를 전달해야하고 큐가 객체를 재활용하지 않음) 대신 ByteBuffers를 사용하여 파이프 또는 교환기를 사용하십시오. –

답변

1

적어도 우선 순위 상속을 지원하려면 RTSJ 호환 구현이 필요합니다. 우선 순위 상한은 선택 사항입니다. 예를 들어, IBM WebSphere Real Time은 우선 순위 상속을 지원하며 모든 Java 잠금에 우선 순위 상속을 제공하기 위해 운영 체제에 의존합니다. 즉, 잠긴 오브젝트와 연관된 pthread 뮤텍스가 항상 존재한다는 것을 의미합니다. 달리 말하면 실제로 들리지 않을 것이다). 전통적인 비 실시간 JVM이 잠긴 잠금을 가속화하는 경향이있는 스핀 잠금은 다른 우선 순위 수준에서 스레드가 실행 중일 때 라이브 록 문제를 발생시키기 때문에 실시간 JVM에서 사용할 수 없습니다 (SCHED_RR/SCHED_FIFO 정책 용). , 어쨌든, 높은 우선 순위 수준 선점, 기간).