私は最近、マルチスレッドについて知りたいと思っていました。次の予期せぬことに遭遇しました。少なくとも単純なコードで呼び出されたときにprintfは一度に1行以上を出力しません。これはprintf()/ pthreadのバグですか、何か不足していますか?
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
char buffer[2];
void * thread_routine(void * args){
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
printf("test %s\n test\n", buffer);
pthread_mutex_unlock(&mutex);
return(NULL);
}
int main(void){
pthread_t thread;
pthread_create(&thread, NULL, thread_routine, NULL);
sleep(1);
buffer[0] = 'c';
buffer[1] = '\0';
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
sleep(10);
return(0);
}
出力は
test prompt$]
このコードの何が問題になっている(10秒待ってから)
のですか?どうして私は一度に2行を印刷するprintfを得ることができないのですか? flockfileでstdoutをブロックし、funlockfileでロックを解除すると状況が改善されることはありません。
あなたは 'volatile'と' buffer'を宣言していませんが、これは役に立たないでしょう。 –
'printf()'を呼び出すたびに 'fflush(stdout);'を実行して、それが変更されるかどうか確認できますか? –
これをコンパイルするために必要な '#include 'が含まれていれば、非常に尋ねられる質問になるでしょう。 – Flexo