2009-03-19 5 views
0

Я не прошу кого-либо сделать это домашнее задание для меня, но я его воспитываю, потому что это очень хорошее практическое введение в C# и потоки, но в то же время я чувствую, что это, возможно, слишком просто.Как вы это сделаете/напишите это домашнее задание? (теоретический)

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

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

Here's the link to the original assignment

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

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

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

+0

Закрыть как не настоящий вопрос. Пожалуйста, повторно сформулируйте вопрос, который будет конкретным, ответственным и простым. Это слишком много текста, слишком много вопросов, и вопросы слишком общие. –

+0

Я отредактировал, чтобы подчеркнуть часть в середине, в которой находится мясо вопроса. –

+0

Это настоящий вопрос, или, скорее, ряд вопросов, которые провоцируют дискуссию. – Firoso

ответ

2

Прочитайте это:

2-я ссылка в большинстве случаев могут стоять на своем собственном.

+0

хорошее чтение, я действительно снимаю больше для теоретической дискуссии здесь, но я ценю ответ! – Firoso

+0

Благодарим за выделение текста, и это действительно улучшает мою основную точку. – Firoso

1

Читайте о SyncLock или Monitor, предполагающем Windows C#.

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

1

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

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