Я видел в Интернете следующий фрагмент кода, касающийся многопоточности в Linux. Но когда я запускаю его, кажется, что все потоки спят, а не только основной поток. Почему? Кроме того, без сна (5) утверждение «Поток успешно создан» выполняется 3 раза вместо 2? Может кто-нибудь объяснить это поведение? Спасибо. Скомпилировано с использованием: gcc -pthread check.c
и мой o/p: обработка первого потока. Поток создан успешно. Обработка второго потока. Поток создан успешно.
Первые две строки печатаются с задержкой в 5 секунд, а следующие 2 — еще через 5 секунд. Почему дочерние потоки спят вместо основного?
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
void* doSomeThing()
{
unsigned long i = 0;
pthread_t id = pthread_self();
if (pthread_equal(id,tid[0]))
{
printf("\n First thread processingn");
}
else
{
printf("\n Second thread processingn");
}
return NULL;
}
int main(void)
{
int i = 0;
int err;
while (i < 2)
{
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
sleep(5);
if (err != 0)
printf("\ncan't create thread [%s]", strerror(err))
else
printf("\n Thread created successfullyn");
i++;
// sleep(5);
}
pthread_join(tid[0],NULL);
pthread_join(tid[1],NULL);
return 0;
}
doSomeThing
беретvoid arg
? - person user2357112 supports Monica   schedule 21.02.2015void* arg
, но вы написалиvoid arg
) - person Basile Starynkevitch   schedule 21.02.2015gcc -Wall -Wextra -g
). Улучшайте код, пока не появится предупреждение. Узнайте, как использовать отладчик (gdb
). Конечно, вы должны установить Linux на свой ноутбук. - person Basile Starynkevitch   schedule 21.02.2015fflush()
— это один из способов. Однако гораздо лучше просто добавить новую строку (\n
) в конец строки, а не в начало. Причина в том, что по умолчанию для многих реализаций вывод буферизуется строкой, поэтому запись новой строки автоматически очищает выходной буфер. - person Ulrich Eckhardt   schedule 21.02.2015