D. Потоки - используйте реализацию counters.cs в подзадачах
1. Завершите взаимное исключение потоков, чтобы защитить доступ к переменной counter. Используйте конструкцию lock, а также явные вызовите Monitor.Enter () и Monitor.Exit (). 2. Создайте программу, в которой вы запускаете два потока, помеченных как A и B, первый пусть выведит «A» и завершится, второй выведит «B» и завершится. Убедитесь, что поток B всегда печатает букву «B» после потока A. Расширьте программу до 3 потоков A, B и C. 3. Создайте программу, как в пункте 3, т.е. поток выведит инфо но не завершается, и будет ждат другого потока и снова реализует вывод и т. Следовательно, отображение на экране должно быть «ABAB…» или соответственно. «ABCABCABC…».
E. LINQ to Objects - используйте реализацию linq_to_objects.cs в подзадачах 1. Использульте всюду LINQ в queue.cs и event.cs