私はこの問題を抱えています:
- いくつかのスレッドを使用する C++ コードがあります。これらのスレッドは pthread タイプです。
- 私のiPhoneアプリでは
NSOperationQueue
、いくつかのC++コードも使用しています。
問題は次のとおりです。C++ pthread の優先度は常に よりも低くなりNsOperationQueue
ます。
どうすればこれを修正できますか? また、優先度を低くしようとしましNSOpertionQueue
たが、この修正は機能しません。
私はこの問題を抱えています:
NSOperationQueue
、いくつかのC++コードも使用しています。問題は次のとおりです。C++ pthread の優先度は常に よりも低くなりNsOperationQueue
ます。
どうすればこれを修正できますか? また、優先度を低くしようとしましNSOpertionQueue
たが、この修正は機能しません。
優先度をいじる必要がある場合 (特に上向き)、それは通常、並行モデルの設計上の欠陥を示しています。これは、リアルタイム スレッド (オーディオ再生など) などの非常に特殊なケースのために予約する必要があります。
まず、スレッドとタスクがどのように動作するかを評価し、他に選択肢がないことを確認してください。通常、オペレーション キューの最大オペレーション カウントを減らす、合計スレッド カウントを減らす、必要なリソースによってタスクをグループ化するなど、簡単なことを行うことができます。
スレッドの優先順位を決定するためにどのような方法を使用していますか?
また、操作の優先順位を設定すると、(スレッド自体ではなく) キューに入れられた操作の順序に影響することに注意してください。
私は常に配布を微調整することでこの問題を解決することができました。あなたは今読むのをやめるべきです:)
利用可能ですが、推奨されません:
操作の優先度を下げるには、操作のmain
:
- (void)main
{
@autorelease {
const double priority = [NSThread threadPriority];
const bool isMainThread = [NSThread isMainThread];
if (!isMainThread) {
[NSThread setThreadPriority:priority * 0.5];
}
do_your_work_here
if (!isMainThread) {
[NSThread setThreadPriority:priority];
}
}
}
どうしてもカーネルをプッシュする必要がある場合は、次のようにして pthread の優先度を設定できます。