pthread_join
ожидает завершения потока, а pthread_create
создает и запускает поток независимо от того, присоединяетесь вы к нему или нет.
В вашем примере есть 3 потока впрограмма (в том числе основной поток).Однако, если основной поток, выполняющий функцию main
, завершается раньше, чем 2 дополнительных потока, вся программа завершается, и дополнительные потоки могут не иметь возможности что-либо вывести.
Самое главное, выСледует помнить, что порядок выполнения потоков программы не определен, это включает, но не обязательно, гарантирует одновременное выполнение.Таким образом, в вашем примере, пока вы ожидаете только одного дополнительного потока от основного потока, нет никакого способа точно сказать, будет ли второй дополнительный поток иметь возможность запустить (и выйти), пока вы ожидаете первого.
Если по какой-то причине вы хотите, чтобы запускался только один поток, вам следует либо запустить только один поток (очевидно :)), либо использовать какой-либо механизм синхронизации (например, mutex или * 1014).* условная переменная ), которая заставит второй поток ожидать выполнения какого-либо условия перед выполнением своей работы.