Я не слишком знаком с библиотеками для этого, но просто размышляю вслух, не могли бы вы иметь группу потоков, повторяющихся на разных шагах на одном шаге из разных начальных точек?
Скажем, вы решили иметь n
потоков (= количество ядер или что-то еще), каждому потоку должна быть задана определенная начальная точка до n
, поэтому первый поток начинается на begin()
, следующий элемент - сравнивает это begin() + n
и т. д. и т. д. Второй поток начинается на begin()+1
, а затем его следующее сравнение тоже n
и т. д.
Таким образом, вы можете создать группу потоков, итерирующих параллельно по списку, сама итерация, предположительно, не дорогая - просто сравнение. Ни один узел не будет сравниваться более одного раза, и вы можете иметь какое-то условие, которое устанавливается, когда какой-либо из потоков устанавливает соответствие, и все должны проверить это условие перед итерацией / сравнением.
Я думаю, что это довольно просто реализовать (?)