Добрый вечер! Получил задание с определенным условием, а именно "разделить операции на потоки и синхронизацию потоков выполнять с помощью базовых механизмов платформы (без использования Task Parallel Library и concurrent-коллекций)". Как можно это реализовать? допустим, необходимо разбить работу программы на несколько потоков: первый поток обходит каталоги, ищет файлы, для которых нужно выполнить расчет, и помещает их в очередь. Рабочие потоки извлекают из очереди описания файлов и выполняют для их содержимого расчет хэш-суммы.
Опыта программирования на C# нет, только Java и С++, но человеку надо сделать на C#.
Создаёте две нити(Thread), одну коллекцию "Очередь"(Queue), первая нить добавляет элементы в коллекцию, вторая извлекает. Операции добавления и извлечения оборачиваете в lock(obj), где obj объект доступный обоим потокам. Всё задача решена.
В C# Вам доступен класс Thread (по ссылке есть примеры использования) аналогичный такому же в Java, который в качестве параметра конструктора принимает некий делегат аналогичный Runnable в Java.
Есть базовый официальный пример на MSDN, который в целом очень похож на то, что можно делать с потоками Java.
Советую ещё заглянуть сюда в главу 15, где описаны примеры работы с мьютексами и семафорами. Ну, и если нужно запустить несколько потоков и дождаться, пока все они закончат работу, то для этого есть класс Barier
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости