Как в реальном времени Java избежать инверсии приоритетов - PullRequest
2 голосов
/ 11 ноября 2011

Спецификация реального времени для Java указывает, что она предлагает инструменты для работы со случаями приоритета инверсии, такими как протоколы Priority Inheritance и Priority Ceiling.

В POSIX имеется pthread_mutexattr_getprotocolкоторый может установить протокол, используемый для решения этого

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

Мне интересно об эквивалентности этого на Java в реальном времени.

Спасибо.

1 Ответ

1 голос
/ 08 декабря 2011

RTSJ-совместимые реализации необходимы для поддержки как минимум приоритетного наследования; приоритет потолка не является обязательным. Например, IBM WebSphere Real Time поддерживает наследование приоритетов и полагается на операционную систему, чтобы обеспечить наследование приоритетов для всех блокировок Java (это означает, что всегда есть мьютекс pthread, связанный с любым заблокированным объектом, хотя у нас все еще есть способы сделать это быстрее, чем в противном случае это звучало бы, особенно для замков, которые на самом деле не оспариваются). Спин-блокировки, которые традиционные JVM не в реальном времени используют для ускорения кратковременных блокировок, не могут использоваться в JVM реального времени, потому что они создают проблемы с живыми блокировками, когда потоки работают с разными уровнями приоритета (для политик SCHED_RR / SCHED_FIFO в любом случае, где более высокий уровень приоритета прерывается, точка).

...