Прежде чем смотреть на фактические конструкции программы, вам сначала нужно правильно настроить алгоритм. Я думаю, у вас есть проблема с поиском функции здесь, потому что у вас нет правильного алгоритма для параллельного сита.
Для начала, ключевым критерием в параллельных алгоритмах является распределение работы по потокам. Если бы все потоки делали одно и то же, никакого ускорения не было бы вообще. Но здесь совершенно неясно, каково распределение работы.
Я даже не уверен, что ваши темы должны ждать. Это неэффективно; лучшие проекты - те, где все потоки выполняют работу всегда.