Я новичок в потоке в C и бездельничал, пытаясь узнать об этом. Я скомпилировал и выполнил приведенный ниже (очень простой c) код:
void *thread(void *vargp);
int main(int argc, char **argv) {
pthread_t tid1, tid2;
printf("Hello from the main thread.\n");
printf("Creating thread 1.\n");
pthread_create(&tid1, NULL, thread, NULL);
printf("Creating thread 2.\n");
pthread_create(&tid2, NULL, thread, NULL);
printf("Main thread is going to wait on peer threads.\n");
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
printf("Peer threads have completed.\n");
return EXIT_SUCCESS;
}
void *thread(void *vargp) {
pthread_t tid = pthread_self();
printf("Hello from thread %u.\n", (unsigned int)tid);
return NULL;
}
Я ожидал, что результат будет ...
Hello from the main thread.
Creating thread 1.
Hello from thread [number].
Creating thread 2.
Hello from thread [number].
...
Но вместо этого это было:
Hello from the main thread.
Creating thread 1.
Creating thread 2.
Main thread is going to wait on peer threads.
Hello from thread 3067947840.
Hello from thread 3076340544.
...
Почему вывод был в таком порядке? Два потока ожидали, пока не запустится функция соединения, или они просто так долго занимали? Нужно ли присоединять потоки к основному потоку, чтобы распечатать вывод на консоль?
Спасибо, что объяснили это мне !!