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

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

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

Здравствуйте. Есть задача: читать большой файл блоками в x байт и потом с этими блоками что-то делать. Процессы чтения и делания нужно распараллелить, при этом сделать так, что б все работало быстро и оптимально. Делать все нужно при помощи thread'ов. Подскажите, пожалуйста, я правильно понимаю алгоритм: 1) создаем потоков по числу процессоров. 2) один поток направляем на чтение файла. Файл он должен считывать в некий буффер (что выбрать в качестве такого буфера? массив, лист или еще что-то?). что делать когда буфер заполнен? поток нужно усыплять и активизировать как только буфер освободится? 3)остальные потоки заставляем читать буфер и делать нужную им работу. все так?

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

textual
Листинг программы
class BuffersPool
{
    private Stack<byte[]> _buffers = new Stack<byte[]>();
    private object _locker = new object();
    
    public BuffersPool(int bufferSize, int count)
    {
        for (int i = 0; i < count; i++)
        {
            _buffers.Push(new byte[bufferSize]);
        }   
    }
    
    public byte[] WaitForBuffer()
    {
        lock (_locker)
        {
            while (!_buffers.Any())
            {
                Monitor.Wait(_locker);
            }
            
            return _buffers.Pop();
        }
    }
    
    public void PutBack(byte[] buffer)
    {
        lock (_locker)
        {
            _buffers.Push(buffer);
            Monitor.Pulse(_locker);
        }
    }
}

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


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

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

9   голосов , оценка 4.111 из 5