Xcode 4 iPad シミュレーターで、NSThread +setThreadPriority を実行してから threadPriority をチェックすると、設定内容に関係なく、結果は常に 0.5 になります。(+setThreadPriority は YES/「成功」の戻りコードを返します。)
これは純粋にシミュレーターの問題ですか、それとも単に setThreadPriority が機能しないのでしょうか?
(「バックグラウンド」スレッドに強制的にCPUを譲る方法を見つけようとしています.pthread_yield_npは、少なくともシミュレーターでは機能していないようです。)
追加: どうやらシミュレーターはかなり脳死状態です。「バックグラウンド」スレッドで 5 秒間スリープしても、メイン スレッドは実行できません。(メイン スレッドは@synchronize
ロックを待機しており、「バックグラウンド」スレッドは「ロック インスタンスの取得」コード内にあり、実際にロックを取得する前に行われます。)
(それを除いて、ため息、「バックグラウンド」スレッドには再帰的なロックがあるかもしれません。それをテストする方法があるのだろうか?)
さらに追加:うん、問題はシミュレーターでスレッドを切り替えることができないことではなく、このアプリには長時間実行されているバックグラウンド スレッドに再帰的なロックがいくつかあり、それらのロック (スタックの初期段階) がロックを保持しているという事実です。メインスレッド。思考が必要。
(しかし、setThreadPriorityがシミュレーターで機能しないことは明らかです。)