у тебя может перекос получиться - каждый поток взял по пачке задач из списка и отдельно работает, один долго работает - то ли завис или то ли просто задача тяжелая, другой быстро отработал и простаивает, в том или ином виде должен быть подбор задач по мере освобождения
проще ( и тупее конечно, UNIX way в чистом виде) это когда дочерний поток берет из пула первую свободную задачу , отработал - или убивается или берет следующую , опять же и по таймауту его проще прибивать если слишком долго работает и только результат обработки одной задачи потеряется и пулом задач можно управлять и число активных потоков менять на лету по необходимости
хотя в общем "и туда тоже можно"
ps или у тебя эта утилита которая смотрит логи и списки обработки делает - будет регулярно запускаться и подправлять списки?