Многопоточное чтение - сжатие - запись файла - 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;
}
}