Как бы вы сделали / напишите это домашнее задание? (Теоретический) - PullRequest
0 голосов
/ 19 марта 2009

Я не прошу никого делать это домашнее задание для меня, но я поднимаю его, потому что это очень хорошее практическое введение в C # и многопоточность, но в то же время я чувствую, что это, возможно, слишком просто.

Это действительно лучший способ научить многопоточности? какие ключевые концепции потоков «утеряны» в этом упражнении, что новые программисты, впервые использующие потоки, скорее всего, не заметят?

У меня есть много теоретических знаний о потоках, но мне не приходилось делать это самостоятельно в прошлом, у кого-нибудь есть какие-то предостережения для меня при написании?

Вот ссылка на исходное задание

и вот текст целей:

1) Создать универсальный потокобезопасный круговой класс очереди и создать графический интерфейс использовать его (см. следующий раздел). В этом контекст, потокобезопасность означает, что каждый операция (метод), которая изменяет содержимое очереди должно быть выполняется только одним потоком за раз во избежание повреждения данных. круговая очередь реализована в виде массив фиксированного размера, где начало и конец очереди являются индексами в массив. Когда очередь заполняется, начало и конец очереди будет перейти к более высоким значениям, как элементы добавил и в конечном итоге обернуть первый индекс в массиве для повторного использования память. Этот класс также должен бросить исключение (указано ниже) вызывающей стороне, если операция недействительным.

2) Создать графический интерфейс для управления две нити в производителе-потребителе мода. GUI сможет начать и запустить и остановить оба производителя и потребительские темы и контролировать скорость, с которой они изменяют GenericCircularQueue.

Ответы [ 3 ]

2 голосов
/ 19 марта 2009
1 голос
/ 19 марта 2009

Я бы сказал, что это упускает две большие вещи:

  • Много записей, чтения не могут получить блокировку и голодание; результат: ограниченная очередь, как это, заполняется. Вам нужен способ дать читателям более высокий приоритет, чтобы они могли истощать очередь.
  • Масштабируемость - вы можете легко сделать его поточно-ориентированным, просто потребовав блокировки для чтения или записи, и это отлично подойдет для одного читателя / одного писателя. Однако, когда у вас будет большое количество производителей / потребителей, у вас будет много споров о потоках.
1 голос
/ 19 марта 2009

Прочтите о SyncLock или Monitor в Windows C #.

Это хороший способ понять многопоточность, особенно во времена многоядерных процессоров.

...