既存の WIN32/Linux ベースのアプリケーションを OS X に移植する必要があり、潜在的な障害があるかどうかを見積もりたいと考えています。
アプリケーションには「ソフトな」リアルタイム制約があります。
具体的には、(おそらく) 高速 (1 ミリ秒まで) でウェイクアップする必要がある優先度の高いスレッドがあり、いくつかのチェックを行ってから、ほとんどの場合すぐに解放されます。
目的はこのメッセージの範囲を超えていますが、デザインは変更できません (実際には変更できません)。そのため、どのように変更できるか、有効かどうか (有効である) についてのコメントはお控えください。
スレッドの論理構造は次のとおりです。
for (;;)
{
wait(event_object, timeout);
... do something ...
}
event_object が通知されたとき、またはタイムアウトが期限切れになったときに、スレッドをウェイクアップする必要があります。タイムアウトは状況によって異なりますが、1 ミリ秒までの場合があります。
アプリケーションの WIN32 バージョンは、timeBeginPeriod() を使用してシステム スケジューラに影響を与え、スレッドが関係する状況でスケジューリング クォンタムを変更します。
これが OS X でも実装できるかどうか、つまり OS X が「本当にプリエム可能」かどうか教えてください。
これは、次の 2 つの問題に要約されます。
1) 優先順位の高いスレッドが計算可能になった場合 (event_object がシグナル状態になるか、タイムアウトが期限切れになるため)、現在実行中の優先順位の低いスレッドがすぐにプリエンプトされるか、次の 100 Hz (kern.clockrate) クロック ティックでのみプリエンプトされるか。
2) pthread_cond_timedwait など、さまざまな OS X の「待機」関数の実際のタイマーの解像度は? 1/100 (つまり 10 ms) ですか、それとも 1 ms 以下ですか? それとも、何かに依存していて、プログラムで変更できますか (Windows の timeBeginPeriod のように)?
繰り返しますが、アプリケーションは「ソフト」リアルタイムです。スレッドが常にうまくいかなくても (航空機が墜落したり、患者が死亡したりすることはありません)、それは問題ありませんが、必要なのは、ほとんどの場合、通常、必要に応じてスケジュールされることです。
アドバイスありがとうございます。