2

私はOperating system course part 2 lecture 2 video 17を見ていました。この講義では、データ構造がの条件変数mutex参照の待機スレッドのリストを含んでいると述べました。1つの条件変数、複数のミューテックス

異なるミューテックスで同じ条件を使用できるかどうか知りたいですか?例えば

:私は

  1. 待機(mutex1、条件A)
  2. 待機(mutex2、条件A)//答えた場合は条件が両方

に同じである2つの待機文を持っていますこれら2つのステートメントは2つの条件変数または1つの条件変数を作成しますか?注:講義では、1つのミューテックス参照のみを述べました。

答えて

0

私は実装によると思います。

POSIXは言う:

場合動的バインディングは、ミューテックス、条件変数こと の間に形成され、pthread_cond_timedwait()又は pthread_cond_wait()操作のいずれかに 特定のミューテックスを指定した条件変数でスレッドを待機、条件変数で少なくとも1つのスレッドがブロックされている限り、有効なままです。この 時間の間に、異なるmutexを使用する変数 の変数を待つ任意のスレッドによる試行の効果は未定義です。 スレッドがすべてブロック解除されると( 操作のように)、その条件変数の次の待機操作は、 操作で指定されたmutexと新しい動的バインディングを形成します。

異なるmutexを使用して同じ条件変数を使用できますが、同時には使用できません。 C++、cppreference.comに関して

氏は述べています:lock.mutex()は現在、同じ 条件変数を待っている他のすべてのスレッドで使用されるもの は未定義の動作であるのと同じミューテックスではない場合

は、この関数を呼び出します。

したがって、POSIX条件変数と同じ要件があるようです。