Прежде всего, задайте себе вопрос, действительно ли вам нужно выполнять многопоточность здесь. Вам нужно общее состояние между потоками, например, попадает ли информация разбора из всех URL в одну и ту же структуру данных? Если нет, процессов (fork) может быть достаточно. Или вы можете даже не заходить так далеко и просто использовать программирование на основе событий (glib, libev).
Glib может стоить вашего времени, даже если вы все-таки решите использовать потоки, поскольку он имеет достойную абстракцию потоков, включая пулы потоков. Это сделает разделение вашего файла очень простым, так как вы просто создаете пулы потоков X, а затем добавляете пулы dl / parse к одному из них (номер строки.% Размера пула).
Если это просто ускорение загрузки, возможно, ваша http-библиотека уже имеет соответствующие функции. Для curl есть куча curl_multicalls, с интересным примером здесь .