Я считаю, что цель pthread_detach - указать, что вы не собираетесь вызывать pthread_join в данном потоке. Это не блокирует. Вы должны сделать это, потому что реализация pthread должна отслеживать тот факт, что поток завершился, и каково его значение выхода в случае более позднего pthread_join. Поэтому вам следует либо вызвать pthread_join, чтобы освободить это пространство во внутренней структуре данных, либо вызвать pthread_detach, чтобы указать, что это пространство не должно быть зарезервировано.