pthread_cond_wait の基本を学ぼうとしています。すべての用法で、私はどちらかを見ます
if(cond is false)
pthread_cond_wait
また
while(cond is false)
pthread_cond_wait
私の質問は、条件が false であるという理由だけで cond_wait を使用したいということです。それでは、if/while ループを明示的に配置するという苦労をしなければならないのはなぜですか。cond_wait
直接ヒットする前に if/while チェックを行わないと、まったく返されないことを理解できます。この目的を解決するためだけの状態チェックですか、それとも別の意味がありますか。不要な条件待機を解決する場合、条件チェックを入れて cond_wait を回避することは、ポーリングに似ていますか?? 私はこのように cond_wait を使用しています。
void* proc_add(void *name){
struct vars *my_data = (struct vars*)name;
printf("In thread Addition and my id = %d\n",pthread_self());
while(1){
pthread_mutex_lock(&mutexattr);
while(!my_data->ipt){ // If no input get in
pthread_cond_wait(&mutexaddr_add,&mutexattr); // Wait till signalled
my_data->opt = my_data->a + my_data->b;
my_data->ipt=1;
pthread_cond_signal(&mutexaddr_opt);
}
pthread_mutex_unlock(&mutexattr);
if(my_data->end)
pthread_exit((void *)0);
}
}
ロジックは、入力が利用可能な場合はいつでもデータを処理するように入力スレッドに要求し、出力スレッドにそれを印刷するように通知します。