pthread_join () блокируется до тех пор, пока дочерний поток не завершится, но вы все равно хотите / должны вызывать его, чтобы правильно очистить дочерний поток после его удаления. Но, как вы говорите, вы не хотите, чтобы ваш основной поток был заблокирован, так как с этим бороться? Я бы сделал так, чтобы дочерний поток отправлял сообщение (через пару сокетов или другим механизмом) обратно в свой родительский поток непосредственно перед тем, как он выйдет .... когда родительский поток получает это сообщение, то он знает, что сейчас подходящее время для вызова pthread_join (), поскольку дочерний поток уже пропал (или почти пропал) и, следовательно, pthread_join никогда не будет блокироваться (или, по крайней мере, не более нескольких миллисекунд).