Я бы использовал очередь, условную переменную и мьютекс и запустил только запрошенное количество потоков, например, 5 или 20 (а не начало 1000).
Каждый поток блокирует переменную условия. Проснувшись, он удаляет первый элемент, разблокирует очередь, работает с элементом, блокирует очередь и проверяет наличие дополнительных элементов. Если очередь пуста, спите по условной переменной. Если нет, разблокируйте, работайте, повторите.
Пока мьютекс заблокирован, он также может проверить, не запросил ли пользователь количество потоков, которое должно быть уменьшено. Просто проверьте, если число> max_count, и если так, поток завершает себя.
Каждый раз, когда у вас есть еще несколько сайтов в очереди, просто заблокируйте мьютекс и добавьте их в очередь, а затем передайте в переменную условия. Все потоки, которые еще не работают, проснутся и начнут новую работу.
Каждый раз, когда пользователь увеличивает запрошенное число потоков, просто запустите их, и они заблокируют очередь, проверит работу и либо перейдут в режим ожидания переменной условия, либо начнут работать.
Каждый поток будет постоянно извлекать больше работы из очереди или спать. Вам не нужно больше 5 или 20.