我最近努力學習多線程,並遇到以下意外 - 至少對我來說 - 行爲:printf在一次非常簡單的代碼中不會打印超過一行:這是一個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);
}
輸出是
(等待10秒)
test prompt$]
什麼是錯的代碼?我怎麼無法讓printf一次打印兩行?請注意,使用flockfile阻止stdout並使用funlockfile解鎖不會改善情況。
你還沒有將'buffer'聲明爲'volatile',這不會有幫助。 – 2012-01-10 15:51:23
你可以試着在每次調用printf()後運行'fflush(stdout);'看看是否改變了事情? – 2012-01-10 15:51:58
如果你包含'#include's需要編譯它,這將是一個出色的問題 – Flexo 2012-01-10 15:52:57