поэтому я просматривал свое следующее школьное задание, и я сбит с толку. Я подумал, что приду к экспертам по какому-то направлению. Моих знаний о синхронизации крайне не хватает, и я не так уж и горячо выполнил задание «mcopyfile», к которому оно относится. Грозный, вероятно, будет хорошим словом для этого. Если бы я мог получить какое-то руководство о том, как решить эту проблему, это было бы очень ценно. Не ища кого-то, кто мог бы выполнить мое задание, просто нужно, чтобы кто-то указывал мне правильное направление. шаги малыша.
Основан на многопоточном инструменте копирования файлов
(mcopyfile) вы создали в Lab 2, теперь, пожалуйста, используйте рабочий
реализация пула (модель «производитель-потребитель»), использующая фиксированный
количество потоков для обработки нагрузки (независимо от того, сколько файлов в
каталог для копирования). Ваша программа должна создать 1 копию файла производителя
нить и многократное копирование файла потребительскими потоками (это число берется
из аргумента командной строки). Поток производителя копии файла будет
генерировать список (исходного и конечного) файловых дескрипторов в буфере
структура с ограниченным размером. Каждый раз, когда производитель обращается к буферу, он будет писать
одна (исходная, целевая) запись в файле (за посещение). И все файлы копировать
потребительские потоки будут читать из этого буфера, выполнять фактический файл
скопировать задачу и удалить соответствующую запись файла (каждый потребитель
будет потреблять одну запись каждый раз). Как производитель, так и потребитель
потоки напишут сообщение в стандартный вывод с указанием имени файла
и статус завершения (например, для производителя: «Завершение
файл1 в буфере », для потребителя:« Завершение копирования файла1 в… »).
Предполагая, что вы знаете, как создавать темы, позвольте мне решить эту проблему для вас. Есть следующие компоненты:
Теперь, в соответствии с вопросом, создайте ветку для производителя и N темы для потребителей. И вот что делают потоки:
Продюсерская нить
Потребительская нить
Надеюсь, это поможет.
Ваше назначение кажется мне довольно простым, если вы знаете, какой API / библиотеку вы будете использовать для работы с потоками.
Сначала вы проанализируете аргумент командной строки и создадите указанное количество потоков, затем из основного потока получите список файлов в папке и начнете помещать их в массив (например, std :: vector), который является общим среди потоков и синхронизируется с мьютексом (или критическим разделом в Windows). Всякий раз, когда один из потоков-получателей получает мьютекс, он создает копию записи файла в массиве, удаляет эту запись из массива, освобождает мьютекс, чтобы другой поток мог начать делать то же самое, и начинает копировать файл, представленный запись удалена из массива.
Я бы дал вам несколько фрагментов кода, но вы не сказали, какой API / библиотека вы используете для работы с потоками.