Многопоточность. Linux, компилятор C

На выходе работы программы могут быть получены разные результаты. Почему? Вот код:

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
void * start_thread (void *message)
{
printf ("%s\n", (const char *) message);
return message;
}
int main (void)
{
pthread_t thing1, thing2;
const char *message1 = "Thing 1";
const char *message2 = "Thing 2";
pthread_create (&thing1, NULL, start_thread, (void *) message1);
pthread_create (&thing2, NULL, start_thread, (void *) message2);
pthread_join (thing1, NULL);
pthread_join (thing2, NULL);
return 0;
}

Ожидаемый результат:

Thing 1
Thing 2

Возможный результат:

Thing 2
Thing 1

Ответы (1 шт):

Автор решения: Mikhailo

При выполнении

pthread_create (&thing1, NULL, start_thread, (void *) message1);
pthread_create (&thing2, NULL, start_thread, (void *) message2);

потоки начинают выполняться, но порядок выполнения не определен. Диспетчер может первый поток пропустить, а второй придержатть, может и наоборот.

pthread_join (thing1, NULL);
pthread_join (thing2, NULL);

а это всего лишь гарантия того, что дальше, пока оба потока не завершатся, вы не продвинетесь.

→ Ссылка