Я недавно попытался узнать о многопоточности и столкнулся со следующим неожиданным - по крайней мере для меня - поведением: printf просто не будет печатать сразу более одной строки при вызове в очень простом следующем коде:
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 c
(подождите 10 секунд и)
test prompt$]
Что не так с этим кодом?Почему я не могу заставить printf печатать две строки одновременно?Обратите внимание, что блокировка стандартного вывода с помощью flockfile и разблокировка с помощью funlockfile не поможет улучшить ситуацию.