Hallo alle zusammen,
nach langem zögern und zittern vor den ach so bösen Pointern habe ich mich nun doch entschlossen auch die Sprache C mal in Angriff zu nehmen. Siehe da es klappt sogar halbwegs
Ich bin nun beim Thema Threads angelangt und habe dort ein Phänomen das ich mir selber nicht erklären kann. Wahrscheinlich ist es mal wieder ganz einfach wenn man es denn erklärt bekommt.
Also:
Soweit ich das verstanden habe:
pthread_create() erstellt und startet den Thred.
pthread_join() Wartet mit dem Main Thread auf Beendigung der anderen Threads wenn es denn nötig ist.
Ich habe mir nun folgendes gebastelt:
Wenn ich es so implementiere läuft alles wunderbar, sprich die Threads wechseln sich auch ab.
Nun zum Verständnis-Problem: Ziehe ich das pthread_join mit in die Funktion die die Thread startet, dann läuft erst der eine Thread bis zum Ende und erst dann beginnt der zweite Thread mit der Arbeit.
Also wenn es so aussieht:
Nun die ach so beliebte Frage: WIESO IST DAS SO?
Vielen Dank und viele Grüße,
WingMan
PS: Gibt es keine Code-Tags oder habe ich die übersehen?
nach langem zögern und zittern vor den ach so bösen Pointern habe ich mich nun doch entschlossen auch die Sprache C mal in Angriff zu nehmen. Siehe da es klappt sogar halbwegs

Ich bin nun beim Thema Threads angelangt und habe dort ein Phänomen das ich mir selber nicht erklären kann. Wahrscheinlich ist es mal wieder ganz einfach wenn man es denn erklärt bekommt.
Also:
Soweit ich das verstanden habe:
pthread_create() erstellt und startet den Thred.
pthread_join() Wartet mit dem Main Thread auf Beendigung der anderen Threads wenn es denn nötig ist.
Ich habe mir nun folgendes gebastelt:
C:
int main()
{
pthread_t t1, t2;
createThread(&t1);
createThread(&t2);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
return 0;
}
void createThread(pthread_t *p)
{
static int counter = 0;
if(counter%2 == 0)
pthread_create(p, NULL, threadOne, NULL);
else
pthread_create(p, NULL, threadTwo, NULL);
counter++;
}
void *threadOne()
{
int i;
for(i = 0; i < 200; i++)
printf(" - ThreadOne %d", i);
return NULL;
}
void *threadTwo()
{
int i;
for(i = 0; i < 100; i++)
printf("ThreadTwo %d", i);
return NULL;
}
Wenn ich es so implementiere läuft alles wunderbar, sprich die Threads wechseln sich auch ab.
Nun zum Verständnis-Problem: Ziehe ich das pthread_join mit in die Funktion die die Thread startet, dann läuft erst der eine Thread bis zum Ende und erst dann beginnt der zweite Thread mit der Arbeit.
Also wenn es so aussieht:
C:
int main()
{
pthread_t t1, t2;
createThread(&t1);
createThread(&t2);
return 0;
}
void createThread(pthread_t *p)
{
static int counter = 0;
if(counter%2 == 0)
pthread_create(p, NULL, threadOne, NULL);
else
pthread_create(p, NULL, threadTwo, NULL);
counter++;
pthread_join(*p, NULL);
}
void *threadOne()
{
int i;
for(i = 0; i < 200; i++)
printf(" - ThreadOne %d", i);
return NULL;
}
void *threadTwo()
{
int i;
for(i = 0; i < 100; i++)
printf("ThreadTwo %d", i);
return NULL;
}
Vielen Dank und viele Grüße,
WingMan
PS: Gibt es keine Code-Tags oder habe ich die übersehen?
Zuletzt bearbeitet: