Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 201

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 201 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 2012019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 201)

Если указывается параметр ьоипбебсара сб гу, то он должен содержать максимальное количество объектов, которые коллекция должна содержать перед тем, как она окажется заблокированной. Если же параметр ЬоипбебСарас1 Гу не указан, то коллекция оказывается неограниченной. Помимо методов тгуйбб () и тгутаке (), определяемых параллельно с теми, что указываются в интерфейсе 1ргобисегСопяивегСо11ессгоп<Т>, в классе В1осКТпдСо11есггоп<Т> определяется также ряд собственных методов. Ниже представлены методы, которые будут использоваться в приведенных далее примерах. Метод Тгу)(бб () возвращает логическое значение Ггие, если в коллекцию добавлен элемент 1 сев. А метод тгутаке () возвращает логическое значение ггие, если элемент 1 Сев удален из коллекции.

Если метод Тг уябб ( ) выполнен успешно, то элемент 1 сев будет содержать объект. (Кроме того, в интерфейсе 1ргобисегСопяивегСо11есг1оп указывается перегружаемый вариант метода СоруТо ( ), определяемого в интерфейсе 1Со11есс1оп, а также метода То)(гга у (), копирующего коллекцию в массив.) Параллельные коллекции зачастую применяются в комбинации с библиотекой распараллеливания задач (ТРЕ) или языком Р1ДМД. В силу особого характера этих коллекций все их классы не будут рассматриваться далее подробно. Вместо этого на конкретных примерах будет дан краткий обзор класса В1оскгпдСо11есгьоп<т>. Усвоив основы построения класса В1осК1пдСо11есс1оп<Т>, вы сможете без особого труда разобраться и в остальных классах параллельных коллекций.

В классе В1осКТпдСо11есггоп<Т>, по существу, реализуется блокирующая очередь. Это означает, что в такой очереди автоматически устанавливается ожидание любых попыток вставить элемент в коллекцию, когда она заполнена, а также попыток удалить элемент из коллекции, когда она пуста. Это идеальное решение для тех ситуаций, которые связаны с применением шаблона "поставщик-потребитель". В классе В1осйьпдСо11есг1оп<т> реализуются интерфейсы 1Со11ескъоп, 1епивегаЫе, 1ЕпивегаЬ1е<Т>,а также 101ярояаЬ1е, В классе В1оскгпдсо11есгаоп<т> определяются следующие конструкторы. Глава 2б. )(оллекции, перечислители и итераторы 985 рцЫьс чего ЛСС(Т Тсеи) рцЫьс Т Таке () Когда метод )(<(б () вызывается для неограниченной коллекции, он добавляет элемент 1 сетка коллекцию и затем возвращает управление вызывающей части программы.

А когда метод л<(с( ( ) вызывается для ограниченной коллекции, он блокирует доступ к ней, если она заполнена. После того как из коллекции будет удален один элемент или больше, указанный элемент 1 сею будет добавлен в коллекцию, и затем произойдет возврат из данного метода. Метод Та)<е () удаляет элемент из коллекции и возвращает управление вызывающей части программы.

(Имеются также варианты обоих методов, принимающие в качестве параметра признак задачи как экземпляр объекта типа Сапсе11ас1опто)<еп.) Применяя методы Або () и Та)ге (), можно реализовать простой шаблон "поставщик-потребитель", как показано в приведенном ниже примере программы. В этой программе создается поставщик, формирующий символы от А до 2, а также потребитель, получающий эти символы. При этом создается коллекция типа В1ос)г1пссо11есс1оп<т>, ограниченная 4 элементами. Простой пример коллекции типа В1осльпдСо11ессьоп. ця1пд Буягепс ця1по Буясею.ТЬгеаг(1пБ.Тав)гя; чя1пэ Буясею.ТЬгеаб1пот чяьпэ Буясеи.со11есс1опв.сопсцггепс; с1авв В1оск1псоеюо ( ягаг1с В1осхьпчсо11есггоп<сьаг> ьсг Произвести и поставить символы от Л до Е.

ясаслс чогб Ргобпсег() ( Рог(сьаг сь = 'л'; сь <= 'Б'т сь++) ( Ьс. Лоб (сю; Сопяо1е.нг1сеъьпе("Производится символ " + сщ; ) // Потребить 26 символов. ясас1с чоьб Сопячюег() ( Гог(тпс 1=0; г < 26; Сопяо1е.игьтеьтпе ("Потребляетсн символ " + Ъс.Та)ге()) ягасьс чогб Маьп() ( О Использовать блокирукпую коллекцию, ограниченную 4 элементами.

Ьс = пен В1осхьпБСо11ессьоп<ссаг>(4); О Создать задачи поставвика и потребителя. Таял Ргоб = пен Таял(Ргосцсег)т Таяк Соп = пен Таял(сопяоюег)т // Запустить задачи. Соп.зтагс()т Ргоб.зсагс()т 986 Часть П. Библиотека С(г Ожидать завершения обеих задач. сгу ( Танк.наьск11(С , Р ) сагсЬ(лэдтечагевхсерсьоп ехс) Сопяо1е.нгьтеъьпе(ехс); ) Г1па11у ( Соп.О1ярозе(); Ргоб. Оьярояе (); Ьс.оьврояе(); ) Если запустить эту программу на выполнение, то на экране появится смешанный результат, выводимый поставщиком и потребителем. Отчасти это объясняется тем, что коллекция Ьс ограничена 4 элементами, а это означает, что в нее может быть добавлено только четыре элемента, прежде чем ее придется сократить.

В качестве эксперимента попробуйте сделать коллекцию Ьс неограниченной и понаблюдай1Е За пО- лученными результатами. В некоторых средах выполнения это приведет к тому, что все элементы коллекции будут сформированы до того, как начнется какое-либо их потребление. Кроме того, попробуйте ограничить коллекцию одним элементом. В этом случае одновременно может быть сформирован лишь один элемент. Для работы с коллекцией типа В1ос)с1поСО11есг1оп<Т> может оказаться полезным и метод Сошр1есеАбб1по () . Ниже приведена форма его объявления.

рпЬ11с чоьб Сошр1егеАббьпэ() Вызов этого метода означает, что в коллекцию не будет больше добавлено ни одного элемента. Это приводит к тому, что свойство 1зйбб1поСошр1еге принимает логическое значение сгпе. Если же коллекция пуста, то свойство 1ясошр1есеб принимает логическое значение Ьгие, и в этом случае вызовы метода Тахе () не блокируются. Ниже приведены формы объявления свойств 1яАбб1псСошр1еге и 1ЯСошр1егеб. роЫТс Ьоо1 1ясошр1етеб ( Чеш ) роЫ1с Ьоо1 1ялббьпчсошр1еге ( деды ) Когда коллекция типа в1ос)г1псСО11есс1од<Т> только начинает формироваться, эти свойства содержат логическое значение Та1яе. А после вызова метода Сошр1егеАбб1пд () они принимают логическое значение Сгде. Ниже приведен вариант предыдущего примера программы, измененный с целью продемонстрировать применение метода Сотр1егеАбб1пс ( ), свойства 1ЯСошр1егеб и метода ТгуТахе () .

/! Применение методов Сошр1егелббьпд(), ТгуТаке() и свойства 1ясошр1егеб. ивхпя Яузгевз чзьпэ Яуясеш.тдгеаб1пд.таяхя; пялим Яуясеш.ТЬгеаб1пеп из1пч Яуятеш.со11есг1опя.сопснгхепш с1аяя В1оскьпэоешо ( ясасьс В1осхьпдсо11есгтоп<сьаг> ьс; !/ Произвести и поставить символы от А до Я.

втаг1с чоьб Ртобосег() ( Глава 25. Коллекции, перечислители и итераторы 987 Тот(спад сп = 'А'; сп <= 'Е'; сп.ь+) ( Ьс. Абб (сП) ! сопяо1е.хгьгевьпе("производится символ " е сы; Ьс.совр1есеАСС1пд б; ) О Потреблять символы до тех пор, пока их будет производить поставщик. ягаггс чогб Сопяцвег() ( спаг сп; нп11е(!Ьс.1ясовр1есеб) ( 11(Ьс .Тгутаке (оцс сю ) Сопяо1е.игьсеьвпе("Потребляется символ " + сп); ) ) ясасгс чоха Ма1п() ( // Использовать блокирухюцую коллекцию, ограниченную 4 элементами.

Ьс = пен В1оск1пэсо11есс1оп<ссаг>(4); // Создать задачи поставщика и потребителя. Таял Ргоб = пеи Таял(ргосцсег); Таял Соп = пен Таял(сопяцвег); Запустить задачи. соп.эгагг(); Ргоб.эсагс б; // Ожидать завершения обеих задач. ггу ( Таял.иа1ГА11(Соп, Ргоб); ) сассп(лоогесагекхсерс1оп ехс) ( Сопяо1е.игггеьгпе(ехс); ) Ььпа11у Соп.вьярояе(); Ргоб.огярояе()г Ьс.эгярове(); ) Этот вариант программы дает такой же результат, как и предыдущий. Главное его отличие заключается в том, что теперь метод Ргобцсег () может производить и поставлять сколько угодно элементов.

С этой целью он просто вызывает метод совр1есеА<(г(1по (), когда завершает создание элементов. А метод сопяцвег () лишь "потребляет" произведенные элементы до тех пор, пока свойство Тясовр1егес) не примет логическое значение Сгце. Несмотря на специфический до некоторой степени характер параллельных коллекций, предназначенных в основном для параллельного программирования, у них, тем не менее, имеется немало общего с обычными, непараллельными коллекциями, описанными в предыдущих разделах.

Если же вам приходится работать в среде параллельного программирования, то для организации одновременного доступа к данным из нескольких потоков вам, скорее всего, придется воспользоваться параллельными коллекциями. 988 Часть (1. Библиотека С() Сохранениеобъектов,определяемых пользователем классов, в коллекции Ради простоты приведенных выше примеров в коллекции, как правило, сохранялись объекты встроенных типов, в том числе 1п С, я С г1пд и с)с а г. Но ведь в коллекции можно хранить не только объекты встроенных типов.

Достоинство коллекций в том и состоит, что в них допускается хранить объекты любого типа, включая объекты определяемых пользователем классов. Рассмотрим сначала простой пример применения класса необобщенной коллекции АггауЬ1яс для хранения и3(формации о товарных запасах. В этом классе инкапсулируется класс 1пчепсогу. Простой пример кслпекпии товарных запасов. нягпч Яуясеиг пягпд Яуягеи.Сс11есггспяг с1аяя 1пчепссгу ( ясггпч паве; с)сиЫе ссягг 1пг спьвпбг рпЫгс 1пчепясгу(ясггпч и, с)спЫе с, 1пс Ы папе = пг ссяг = с~ спйапб = Ы ) рагс счегггбе ясггпч Тоягг1пч() ( гегвгп Ясггпч.тсгыас("(0,-10)стоимость: (1,6:С) Наличие: (2)", пате, ссяя, спйяпс))г ) ) с1аяв 1пчепссгуььяс ( ясас1с чоха Магп() ( йггауыяг гпч = пен йггауьгяя() с'с' Добавить элементы в список.

Характеристики

Тип файла
DJVU-файл
Размер
7,66 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6310
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее