Доброго времени всем.
Обращаюсь ко всем Гуру многопоточного программирования
кто на этом съел собаку.
Делаю консольный патчер для возможности переноса уже установленного Qt в любую другую директорию,
или просто для исправления некоторых бинарных файлов (например qdoc для Qt5-betaX) или тестовых (в перспективе).
Итак, имеется некая функция, которая патчит заданный бинарный файл:
static void patch()
{
// do
}
Есть набор бинарных файлов (набор полных путей к файлам) для патчинга.
Как планирую сделать:
1. При старте приложения набор заданных имен файлов один раз помещается в некую очередь или список.
Пусть будет типа queue<string>. Доступ к очереди защищается при помощи семафора.
2. Стартую оптимальное кол-во потоков. Каждый поток пытается обратиться к очереди и
изъять из нее задачу - т.е. имя файла и пропатчить его. Когда поток пропатчивает файл
он обращается к очереди (или списку) за новой задачей или, если задач больше нет (очередь пуста)
то поток завершается.
Так вот, можно ли как-то это дело оптимизировать без использования семафора/мьютекса?
Или тут без вариантов?
В принципе, временем на изъятие из очереди/списка имени файла можно пренебречь,
т.к. это очень быстро, поэтому семафор не должен сильно задерживать потоки.
Кто что думает?