2012-03-07 10 views
2

すべてのスレッドがビジー状態で、メインスレッドがスレッドcond信号を送信した場合はどうなりますか?待機中のスレッドがなく、条件信号が送信された場合はどうなりますか?

1スレッドプール内の1つのメインスレッドと3つのスレッド。 3 pthreadsのは

pthread_mutex_lock(&sync_mutex); 
    pthread_cond_wait(&sync_cond, &sync_mutex); 
    pthread_mutex_unlock(&sync_mutex); 

メインスレッドの状態にある作業を処理するためにスレッドを覚ますために信号を送りました。この状況では、3つのスレッドが既にビジー状態で、次の信号が到着した場合はどうなりますか?

+0

誰も信号を待っていない場合、信号は何の効果もありません。あなたはどういう意味ですか? –

+0

スレッドが利用できるようになるまで待ちますか? –

答えて

6

何もありません。信号が消えます。

+0

この問題を解決するための提案はありますか?ありがとうございます。 –

+2

まだ何も待っていなくても、信号の時間/カウントを記録したい場合は、セマフォを使用してください。セマフォーにはカウントがあり、イベントなどは受け付けません。 –

+0

セマフォー..ありがとうございます。シンプルなキューを使用してイベントを格納し、スレッドが使用可能になったときにデキューする方法はありますか? –

4

あなたは、以下のいずれかの関数を使用している場合:

pthread_cond_signalは - 条件変数condに備えて待機しているスレッドの1を再起動します。 pthread_cond_broadcast - 指定された条件変数によってブロックされたすべてのスレッドを起動します。

マニュアル状態

はpthread_cond_broadcast()とpthread_cond_signalを()現在 指揮にブロックされた何のスレッドが存在しない場合 は効果がないものと機能していること。

+0

返信いただきありがとうございます –

関連する問題