我最近努力学习多线程,并遇到以下意外 - 至少对我来说 - 行为: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