Я тестирую поведение запуска параллельных потоков в C, с функцией потока, которая выполняется бесконечно. Мой вопрос: почему, в приведенном ниже коде, «HELLO !!!» печатается? Я думал, что pthread_create() вызывается, а затем сразу переходит к следующей итерации цикла, почему код, ожидающий завершения 1-го pthread_create()? Не должны ли одновременно выполняться несколько потоков?Выполнение параллельных потоков в C?
void main(int argc, char **argv)
{
pthread_t tid;
int i;
//Create 4 inf threads
for (i=0;i< 4;i++)
{
//printf("hello!\n");
//pthread_create(&tid, NULL, thread_incr, (void *)i);
pthread_create(&tid, NULL, t_nostop, (void *)i);
printf("HELLO!!!"); //This linen is NEVER printed!!
}
pthread_exit(NULL);
}
void* t_nostop(void * argp)
{
int i=1;
int t_num=(int) argp;
while(i==1){t_num++;}
}
Обратите внимание, что это будет сделано автоматически, но вы вызываете 'pthread_exit' вместо возврата от 'main'. – zch
ОК спасибо, что это было! Добавлено \ n, и все работает нормально! В чем смысл буферизации строк, почему это происходит без символа newline? simonc – jerryh91
Рад, что помогло. Буферизация строк происходит, когда ОС решает, что записи в консоли относительно дороги, и их следует пытаться только для согласованных блоков текста. Одним простым определением для когерентного блока является линия. Пока он ждет ввода новой строки, ОС хранит содержимое вызовов 'printf' в блоке памяти, добавляя последующие' printf '. – simonc