Многопоточное чтение - сжатие - запись файла - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Необходимо выполнить компрессию файла, причем чтение, запись и сжатие должны проходить в разных потоках. Таким образом, скажем, запись не должна зависеть от чтения (при этом используя стандартные средства 3.5). Попробовал реализовать конвейерную модель. Читал в один массив, сжимал в другой, записывал в файл - это не сработало, т.к. память не резиновая. Хотелось бы узнать, в каком направлении мне двигаться, т.к. с потоками работал мало. Использовать асинхронные варианты методов?

Решение задачи: «Многопоточное чтение - сжатие - запись файла»

textual
Листинг программы
  1. public class BoundedBuffer<E>
  2.     {
  3.         private readonly Semaphore availableItems;
  4.         private readonly Semaphore availableSpaces;
  5.         private readonly E[] items;
  6.         private int putPosition = 0;
  7.         private int takePosition = 0;
  8.  
  9.         public BoundedBuffer(int capacity) {
  10.             availableSpaces = new Semaphore(capacity, capacity);
  11.             availableItems = new Semaphore(0, capacity);
  12.             items = new E[capacity];
  13.         }
  14.  
  15.         public void Add(E item)
  16.         {
  17.             availableSpaces.WaitOne();
  18.             lock (items)
  19.             {
  20.                 int i = putPosition;
  21.                 items[i] = item;
  22.                 putPosition = (++i == items.Length) ? 0 : i;
  23.             }
  24.             availableItems.Release();
  25.         }
  26.  
  27.         public E Take()
  28.         {
  29.             availableItems.WaitOne();
  30.             E item;
  31.             lock (items)
  32.             {
  33.                 int i = takePosition;
  34.                 item = items[i];
  35.                 items[i] = default(E);
  36.                 takePosition = (++i == items.Length) ? 0 : i;
  37.             }
  38.             availableSpaces.Release();
  39.             return item;
  40.         }
  41.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут