2011-11-11 11 views
2

Javaのリアルタイム仕様は、優先度継承および優先度上限プロトコルのような優先度反転のケースを扱うためのツールを提供することを示しています。Real Javaが優先度逆転を回避する方法

On POSIX、私はリアルタイムJavaの上でこののequivalanceについて疑問に思って、この

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

を解決するために使用されるプロトコルを設定することができpthread_mutexattr_getprotocolがあります。

ありがとうございます。

+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ポリシー、とにかく、より高い優先度が優先する、期間)。

関連する問題