Cuando sale el hilo principal, ¿también salen otros hilos?

Tengo un problema con los hilos principales y otros hilos en el mismo proceso. Cuando la función principal regresa, ¿los otros subprocesos salen también? Estoy confundido acerca de esto.

Considere el siguiente código de prueba:

void* test1(void *arg)
{
    unsigned int i = 0;
    while (1){
        i+=1;
    }
    return NULL;
}

void* test2(void *arg)
{
    long double i = 1.0;
    while (1){
        i *= 1.1;
    }
    return NULL;
}

void startThread ( void * (*run)(void*), void *arg) {
  pthread_t t;
  pthread_attr_t attr;
  if (pthread_attr_init(&attr) != 0
      || pthread_create(&t, &attr, run, arg) != 0
      || pthread_attr_destroy(&attr) != 0
      || pthread_detach(t) != 0) {
    printf("Unable to launch a thread\n");
    exit(1);
  }
}

int main()
{
    startThread(test1, NULL);
    startThread(test2, NULL);

    sleep(4);
    printf("main thread return.\n");

    return 0;
}

Cuando el "hilo principal vuelva". las impresiones, el hilo test1 y test2 también salen, ¿alguien puede decirme por qué?