1

通常、次のように1つの変数のみを通知できます

pthread_cond_signal (condition) 

ただし、複数の条件変数を同時に起こしたい。どうやってやるの?

つまり、その配列に格納されているすべての条件変数をウェイクするために、シグナル関数に配列を与えることはできますか?

   four condition variable : X, Y, Z, T

   I want :  waking up these four condition over sending signal, at the same time
4

3 に答える 3

1

実装で概念的な間違いを犯したようです。

1 つのリソースを共有しようとしていますが、同じリソースに多くの条件変数を割り当てているようです。

リソースを 1 つだけモデル化している場合、すべての子が異なる条件変数を持つべきではなく、すべてが同じものを共有する必要があります。

pthread_cond_wait(A)したがって、条件変数 A によって保護されているキューであるとしましょうA に依存するすべてのスレッドは、 a を実行するpthread_broadcast(A)と、それらのスレッドのすべてが起動され、そこにある最初のスレッドがデータを処理できるようになります。

実装を本当に変更できない場合は、スタックを使用して最初の condvar をポップし、一番下に挿入することができます。これにより、十分なデータがある限り、飢えることはありません。

于 2012-04-25T10:14:16.550 に答える
0

他の条件を必要としない場合、すべての子を同時にウェイクアップする場合は、1つの条件変数のみを使用してから、を発行し て、この1pthread_cond_broadcast()つの条件変数で待機しているすべての子をウェイクアップできます。

于 2012-04-25T10:06:16.173 に答える
0

いいえ、配列を使用してシグナルを送ることはできません。シグナルを送る変数ごとに pthread_cond_signal を呼び出す必要があります。

于 2012-04-25T06:37:54.563 に答える