1

C++ プログラムで pthreads と pthread_mutexes を使用したいと考えています。私はまだ実際のコードを持っていません。ミューテックスがどのように機能するかについての質問です。スレッド 1 でミューテックスをロックすると、n 個の他のスレッドが同じミューテックスをロックしようとします。スレッド 1 がミューテックスをロック解除すると、どのような動作になりますか? スレッド 1 がロックを取得し、スレッド 2 がロックを試み、次にスレッド 3 がロックを試みた場合、ロックが解放されたときにスレッド 2 がスレッド 3 よりも優先されますか?

ロックのより組織化されたタイムラインを次に示します。

thread 1 acquires lock
thread 2 attempts to lock
thread 3 attempts to lock
thread 4 attempts to lock
thread 1 unlocks mutex
??

言い換えれば、スレッドがロックを取得しようとした/作成された順序でスレッドを実行したいと考えています。これを行うためのより良い方法があれば、私は提案を受け入れる以上のものです。

4

2 に答える 2

4

いいえ - そのような保証された注文はありません。スレッド 1 が解放された後、mutex スレッド 3 またはスレッド 2 がそれを取得できます。それは予測できません。

説明はこれを読んでください。

于 2013-06-13T20:33:37.517 に答える
0

他の人が潜在的な修正を見ることができるように、自分のソリューションを投稿すると思いました:

私のメイン スレッドは、作成ミューテックスをロックし、各スレッドをstd::queue.

main の開始時に、マネージャー スレッドを作成します。これは、サイクルごとにキューが空かどうかをチェックする無限の while ループにあります。マネージャー スレッドは、キューが空でないことを確認すると ( if(! queue::empty()))、ロックを取得するのを待ってから、フロント スレッドを作成し、キューからポップして、スレッドで pthread_join() を実行し、次のスレッドのためにループ バックします。

于 2013-06-14T16:53:37.743 に答える