@DenisVladimirovich

Как выполнить данные задачи?

Просматриваю я задачи к вакансиям и попались тут такие две.

Задача #1
Есть "сервер" в виде статического класса.
У него есть переменная count (тип int) и два метода, которые позволяют эту переменную читать и писать: GetCount() и AddToCount(int value).
К серверу стучатся множество параллельных клиентов, которые в основном читают, но некоторые добавляют значение к count.

Нужно реализовать GetCount / AddToCount так, чтобы:
читатели могли читать параллельно, без выстраивания в очередь по локу;
писатели писали только последовательно и никогда одновременно;
пока писатели добавляют и пишут, читатели должны ждать окончания записи.

Задача #2
В .net есть возможность звать делегаты как синхронно:
EventHandler h = new EventHandler(this.myEventHandler);
h.Invoke(null, EventArgs.Empty);
так и асинхронно:
var res = h.BeginInvoke(null, EventArgs.Empty, null, null);

Нужно реализовать возможность полусинхронного вызова делегата (написать реализацию класса AsyncCaller), который бы работал таким образом:

EventHandler h = new EventHandler(this.myEventHandler);
ac = new AsyncCaller(h);
bool completedOK = ac.Invoke(5000, null, EventArgs.Empty);

"Полусинхронного" в данном случае означает, что делегат будет вызван, и вызывающий поток будет ждать, пока вызов не выполнится. Но если выполнение делегата займет больше 5000 миллисекунд, то ac.Invoke выйдет и вернет в completedOK значение false.

Подскажите, где по ним почитать?
  • Вопрос задан
  • 604 просмотра
Пригласить эксперта
Ответы на вопрос 2
zagayevskiy
@zagayevskiy
Android developer at Yandex
По первой задаче даже пример есть в официальной доке
Ответ написан
A1ejandro
@A1ejandro
youtube блогер, ИТ-специалист
Хорошие задачи. Конечно нужно и читать, и самое главное - _думать_. Программирование это в большой степени творчество. Умение решать типовые задачи - хорошо, но это придется освоить всем. А вот умение изобретать нестандартные решения для нестандартных задач, изобретать то, до чего еще никто не додумался - отличает настоящих мастеров своего дела... Успехов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы