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