pthread_join( thread1, NULL);
Главный поток ожидает здесь этого вызова соединения, пока thread1
не завершит свою работу.Как только thread1
завершит выполнение, основной поток продолжит работу и выполнит следующую инструкцию printf
.
printf( "Let's see when is this printed...\n" );
Опять же, главный поток будет ждать здесь, пока thread2
завершит свою работу.
pthread_join( thread2, NULL);
Как только thread2
завершит свою работу, основной поток продвигается вперед и выполняется следующий оператор, который является printf
.
printf( "And this one?...\n" );
Последовательность будет работать в приведенном вышеупомянутым способом. Вероятно, это происходит слишком рано, потому что следы, которые вы видите, сбивают с толку.
Кроме того, не используйте printf
, чтобы увидеть поведение многопоточных программ, может быть весьма обманчивым, порядок printf может не всегда указыватьправильный поток управления Поскольку он основан на синхронизации, и сброс буферов в стандартный вывод может не произойти в том же порядке, поскольку распечатки выполнялись по потокам.