1

私はこの問題を抱えています:

  • いくつかのスレッドを使用する C++ コードがあります。これらのスレッドは pthread タイプです。
  • 私のiPhoneアプリではNSOperationQueue、いくつかのC++コードも使用しています。

問題は次のとおりです。C++ pthread の優先度は常に よりも低くなりNsOperationQueueます。

どうすればこれを修正できますか? また、優先度を低くしようとしましNSOpertionQueueたが、この修正は機能しません。

4

1 に答える 1

1

優先度をいじる必要がある場合 (特に上向き)、それは通常、並行モデルの設計上の欠陥を示しています。これは、リアルタイム スレッド (オーディオ再生など) などの非常に特殊なケースのために予約する必要があります。

まず、スレッドとタスクがどのように動作するかを評価し、他に選択肢がないことを確認してください。通常、オペレーション キューの最大オペレーション カウントを減らす、合計スレッド カウントを減らす、必要なリソースによってタスクをグループ化するなど、簡単なことを行うことができます。

スレッドの優先順位を決定するためにどのような方法を使用していますか?

また、操作の優先順位を設定すると、(スレッド自体ではなく) キューに入れられた操作の順序に影響することに注意してください。

私は常に配布を微調整することでこの問題を解決することができました。あなたは今読むのをやめるべきです:)


利用可能ですが、推奨されません:

操作の優先度を下げるには、操作の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 の優先度を設定できます。

リアルタイム優先度の pthread

pthreadsでスレッドの優先順位を上げる方法は?

于 2012-04-27T12:43:00.690 に答える