Многопоточность. 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);
а это всего лишь гарантия того, что дальше, пока оба потока не завершатся, вы не продвинетесь.