2016-06-25 6 views
0

私たちはGame of lifeの良い同期を見つけようとしています。2番目のスレッドはcond_waitから起動しません

したがって、私たちには1つのプリンタスレッドがあり、次にプリントアウトする新しい世代のセルを計算する2つのスレッドがあります。

計算スレッドは、古いものがすでに印刷されている場合にのみ、新しい世代のゲームの計算を開始することができます。

したがって、両方の計算スレッドをウェイクアップさせるはずのプリンタスレッドからpthread_cond_signal()を使用します。 1つのスレッドだけ我々はすでに放送の代わりに、信号を使用しようとしましたが、それは何の効果を持っていなかったpthread_cond_wait()

で目覚める何らかの理由で

これが私たちのプリンタのスレッドが何をするかです:

field -> printed = true; 
//pthread_mutex_unlock(&(field -> print_mutex)); 
int status = pthread_cond_signal(&(field -> print_signal)); 

これが私たちの計算のスレッドが何をすべきかです:その後

while(!field -> printed){ 
    printf("waiting for print_signal: %d\n", field -> printed); 
    pthread_mutex_unlock(&(field -> print_mutex)); 
    pthread_cond_wait(&(field -> print_signal), &(field -> print_mutex)); 
    printf("print_signal received: %d\n", field -> printed); 
} 
printf("print_signal received2: %d\n", field -> printed); 
pthread_mutex_unlock(&(field -> print_mutex)); 

計算スレッドが自分の計算を行うと、彼らは設定前に完了し、すべてのスレッドまで待ちますフィールド - > falseに戻って印刷されます。

ミューテックスを正しく使用する方法がまだ分かりません。

答えて

関連する問題