2017-06-12 6 views
3

2つのスレッドがミューテックスを待っている場合、最も優先度の高いスレッドは常に優先度の低いものより前にミューテックスを取るようにスレッドに優先順位をつけようとしています。C++ミューテックスロックスレッドの優先度

私のスレッドのスレッド優先度を変更することで、達成する必要があることを同僚は提案しました。私はSetThreadPriority()関数を使って待ちスレッドの1つを0(正常)に設定し、もう1つを2(最高)に設定しようとしましたが、期待していたようなmutexの動作には影響しません。ロックは現在、常に所有権を要求した最初のスレッドに移動します。

この動作は正常ですか?私の同僚が思っていたこととは反対に?スレッドの優先順位を失うかもしれない別の方法がありますか?あるいは、私は解決するためにもっと複雑な問題を見ていますか?

+1

私の質問は、スレッド優先度(SetThreadPriority()で定義されている)が、あなたが参照している質問がしていないmutex優先度に影響を与えるかどうかを直接指しています。彼らは似ているが、私は彼らが全く同じことに答えるとは思わない。 – lhbortho

+0

ええ、ごめんなさい。これは確かにこれに答える: "私はスレッドに優先順位を与えるために探しているので、2つのスレッドがミューテックスを待っている場合、最も優先度の高いスレッドは常に優先度の低いものより前にミューテックスをとる。 – Drop

+1

ええ、私は同意する、私の次のステップは間違いなくあなたが言ったような質問を見ていた。私はスレッド優先度自体が最初の要素ではないことを確認しようとしていました。 – lhbortho

答えて

2

スレッド優先順位は、優先順位の高いスレッドを優先的にスケジューリングするスケジューラによって決定されるように、スレッドがCPUに到達する時間を示します。mutexの動作には影響しません。そうするようにする。