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

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

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

Здравствуйте. Мне нужно создать файл и записать в него информацию, для этого нужно использовать многопоточность. Много читал здесь на форуме, и не только здесь(но все равно плохо понял), получился такой код.
Листинг программы
  1. using (FileStream orignialFileStream = File.OpenRead(sourceFileName))
  2. using (FileStream finalFileStream = File.Create(finalFileName))
  3. {
  4. Thread[] threads = new Thread[threadsCount];
  5. for (int i = 0; i < threadsCount; i++)
  6. {
  7. threads[i] = new Thread(() => WriteBytes(orignialFileStream, finalFileStream));
  8. }
  9. foreach (Thread t in threads)
  10. {
  11. t.Start();
  12. }
  13. }
И метот WriteBytes:
Листинг программы
  1. private void WriteBytes(Stream streamToRead, Stream streamToWrite)
  2. {
  3. lock (loker)
  4. {
  5. byte[] buffer = new byte[bufferSize];
  6. int nRead = 0;
  7. while ((nRead = streamToRead.Read(buffer, 0, buffer.Length)) > 0)
  8. {
  9. streamToWrite.Write(buffer, 0, nRead);
  10. }
  11. }
  12. }
Если я правильно понимаю, замок блокирует StreamToRead когда к нему обращается первый Thread, и этот первый Thread в итоге не отпускает его до "победного". После этого доступ получает второй поток, и делает абсолютно то же самое что и первый, тем самым дублируя работу, а не выполняя ее паралельно. Так ли это? Или я что-то не правильно понимаю.

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

textual
Листинг программы
  1.  private void ReadFile()
  2.         {
  3.             using (FileStream fileStream = new FileStream(sourceFileInfo.FullName, FileMode.Open, FileAccess.Read))
  4.             {
  5.                 blockManager.CreateDataBlocksFromStream(fileStream);
  6.             }
  7.         }
  8.         private void WriteFile()
  9.         {
  10.             using (FileStream fileStream = new FileStream(newFileInfo.Name, FileMode.Create, FileAccess.Write))
  11.             using (GZipStream gzipStream = new GZipStream(fileStream, CompressionMode.Compress))
  12.             {
  13.                 blockManager.WriteDataBlocksToFile(gzipStream);
  14.             }
  15.         }

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


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

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

7   голосов , оценка 3.571 из 5

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

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

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