пул потоков с++
Есть ли какая-то реализация пула потоков, чтобы они выполняли метод с разными входными параметрами. Объясняю. Допустим, есть вектор с ссылкам и 5 потоков. В векторе лежит одна единственная ссылка. Я хочу, чтобы один поток взял эту ссылку, скачал, нашёл на ней все ссылки, положил в этот же вектор и удалил исходные, а остальные потоки также брали б ссылки из этого вектора и делали ту же работу. Я пробовал некоторые пулы потоков, но у меня выходило так, что они все одновременно брали эту ссылку и в итоге выполняли одинаковую работу. Мне б хотелось, чтоб все потоки брали разные ссылки. Понимаю, что это скорее всего не самый простой способ написания краулера, но мне просто хочется реализовать эту идею, если это, конечно, возможно.
Ответы (1 шт):
Синхронизируйте доступ к разделяемым данным (в вашем случае это вектор, но лучше очередь или дек). После того как поток получил ссылку, удаляйте ее из вашей структуры данных и освобождайте блокировку. Также кешируйте обработанные ссылки в хеш-таблице или еще где-нибудь.