Как выполнить синхронизацию потоков - C#

293
09 сентября 2017, 23:20

Добрый вечер! Получил задание с определенным условием, а именно "разделить операции на потоки и синхронизацию потоков выполнять с помощью базовых механизмов платформы (без использования Task Parallel Library и concurrent-коллекций)". Как можно это реализовать? допустим, необходимо разбить работу программы на несколько потоков: первый поток обходит каталоги, ищет файлы, для которых нужно выполнить расчет, и помещает их в очередь. Рабочие потоки извлекают из очереди описания файлов и выполняют для их содержимого расчет хэш-суммы.

Опыта программирования на C# нет, только Java и С++, но человеку надо сделать на C#.

Answer 1

Создаёте две нити(Thread), одну коллекцию "Очередь"(Queue), первая нить добавляет элементы в коллекцию, вторая извлекает. Операции добавления и извлечения оборачиваете в lock(obj), где obj объект доступный обоим потокам. Всё задача решена.

Answer 2

В C# Вам доступен класс Thread (по ссылке есть примеры использования) аналогичный такому же в Java, который в качестве параметра конструктора принимает некий делегат аналогичный Runnable в Java.

Есть базовый официальный пример на MSDN, который в целом очень похож на то, что можно делать с потоками Java.

Советую ещё заглянуть сюда в главу 15, где описаны примеры работы с мьютексами и семафорами. Ну, и если нужно запустить несколько потоков и дождаться, пока все они закончат работу, то для этого есть класс Barier

READ ALSO
Способы создания объектов в C#

Способы создания объектов в C#

Я знаю 1 способ создать объекта в C#:

353
После перезахода в сцену кнопка share не работает

После перезахода в сцену кнопка share не работает

Подскажите пожалуйста как решить проблему

235
C#. не Копируется Stream в MemoryStream

C#. не Копируется Stream в MemoryStream

Здравствуйте, есть ответ полученный для httpClientОтвет считываю не в строку, а в поток (т

218
Синхронизация imap (клиент-сервер) c#

Синхронизация imap (клиент-сервер) c#

Добрый день, стоит такая цель : синхронизироваться с почтой и иметь возможность загружать/скачивать письмаЕсть ли такая возможность ? желательно...

263