Многопоточное чтение - сжатие - запись файла - 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д