Видях следната част от кода относно нишките в Linux в мрежата. Но когато го стартирам, всички нишки изглежда спят вместо само основната нишка. Защо? Също така, без sleep(5), изразът-"Нишката е създадена успешно" се изпълнява 3 пъти вместо 2? Може ли някой да обясни това поведение? Благодаря Компилирано с помощта на: gcc -pthread check.c
и моя o/p: Първа обработка на нишкаn Нишка, създадена успешноn Втора обработка на нишкаn Нишка, създадена успешноn
Първите два реда се отпечатват със закъснение от 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