Многопоточное чтение - сжатие - запись файла - C#
Формулировка задачи:
Здравствуйте.
Необходимо выполнить компрессию файла, причем чтение, запись и сжатие должны проходить в разных потоках. Таким образом, скажем, запись не должна зависеть от чтения (при этом используя стандартные средства 3.5).
Попробовал реализовать конвейерную модель. Читал в один массив, сжимал в другой, записывал в файл - это не сработало, т.к. память не резиновая.
Хотелось бы узнать, в каком направлении мне двигаться, т.к. с потоками работал мало. Использовать асинхронные варианты методов?
Решение задачи: «Многопоточное чтение - сжатие - запись файла»
textual
Листинг программы
- public class BoundedBuffer<E>
- {
- private readonly Semaphore availableItems;
- private readonly Semaphore availableSpaces;
- private readonly E[] items;
- private int putPosition = 0;
- private int takePosition = 0;
- public BoundedBuffer(int capacity) {
- availableSpaces = new Semaphore(capacity, capacity);
- availableItems = new Semaphore(0, capacity);
- items = new E[capacity];
- }
- public void Add(E item)
- {
- availableSpaces.WaitOne();
- lock (items)
- {
- int i = putPosition;
- items[i] = item;
- putPosition = (++i == items.Length) ? 0 : i;
- }
- availableItems.Release();
- }
- public E Take()
- {
- availableItems.WaitOne();
- E item;
- lock (items)
- {
- int i = takePosition;
- item = items[i];
- items[i] = default(E);
- takePosition = (++i == items.Length) ? 0 : i;
- }
- availableSpaces.Release();
- return item;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д