Г. Шилдт - С#4.0 Полное руководство (1160795), страница 3
Текст из файла (страница 3)
Многопоточное программирование. Часть первая: основы Основы многопоточной обработки 766 767 768 769 771 773 774 776 777 778 778 779 779 781 781 783 783 784 784 785 786 808 810 8П 811 812 812 812 814 815 816 816 819 820 820 824 827 829 830 833 834 Содержание Класс ТЬгеас1 Создание и запуск потока Простые способы усовершенствования многопоточной программы Создание нескольких потоков Определение момента окончания потока Передача аргумента потоку Свойство 1зВас1сбтоипс1 Приоритеты потоков Синхронизация Другой подход к синхронизации потоков Класс Моп!Гог и блокировка Сообщение между потоками с помощью методов 1Лта11О, Рп!ве() и Ри!веА11О Пример использования методов Ха!1О и Ри!зеО Взаимоблокировка и состояние гонки Применение атрибута МеГЬод1тр1Аттг!Ъцте Применение мьютекса и семафора Мьютекс Семафор Применение событий Класс 1пгег1ос)сег) Классы синхронизации, внедренные в версии .Ь)ЕТ Ргатетчог)г 4.0 Прерывание потока Другая форма метода АЬоггО Отмена действия метода АЬоггО Приостановка и возобновление потока Определение состояния потока Применение основного потока Дополнительные средства многопоточной обработки, внедренные в версии .Ь!ЕТ Ргагпеи ог)с 4.0 Рекомендации по многопоточному программированию Запуск отдельной задачи Глава 24.
Многопоточное программирование. Часть вторая: библиотека ТРЬ Два подхода к параллельному программированию Класс Таз1с Создание задачи Применение идентификатора задачи Применение методов ожидания Вызов метода О!зрозеО Применение класса ТавИастогу для запуска задачи Применение лямбда-выражения в качестве задачи Создание продолжения задачи 835 836 838 839 841 844 846 847 849 853 855 855 856 860 860 862 863 867 870 873 874 875 876 878 880 880 880 882 882 882 885 886 887 887 890 891 895 895 896 897 20 Содержание коллекции коллекций ллекций Возврат значения из задачи Отмена задачи и обработка исключения А88ге8атеЕхсербоп Другие средства организации задач Класс Рага11е1 Распараллеливание задач методом 1пчокеО Применение метода Рог() Применение метода РогЕасЬО Исследование возможностей РЕПЩ Класс Рага11е!ЕпшпегаЫе Распараллеливание запроса методом АвРага11е1() Применение метода АвОп(егес1() Отмена параллельного запроса Другие средства РЕ11Щ Вопросы эффективности РЕ1КЯ Глава 25.
Коллекции, перечислители и итераторы Краткий обзор коллекций Необобщенные коллекции Интерфейсы необобщенных коллекций Структура Р1сбопагуЕптгу Классы необобщенных коллекций Хранение отдельных битов в классе коллекции ВВАггау Специальные коллекции Обобщенные коллекции Интерфейсы обобщенных коллекций Структура КеуЧа1иеРатг<ТКеу, ТЧа1не> Классы обобщенных коллекций Параллельные коллекции Сохранение объектов, определяемых пользователем классов, в Реализация интерфейса 1СотрагаЫе Реализация интерфейса 1СотпрагаЫе для необобщенных Реализация интерфейса 1СоптрагаЫе для обобщенных ко Применение интерфейса 1Соптрагег Применение необобщенного интерфейса 1Соптрагег Применение обобщенного интерфейса 1Сотрагег<Т> Применение класса ВггшВСотрагег Доступ к коллекции с помощью перечислителя Применение обычного перечислителя Применение перечислителя типа 1Р)сбопагуЕпшнегагог Реализация интерфейсов 1ЕпшпегаЫе и 1Епшпегатог Применение итераторов Прерывание итератора Применение нескольких операторов у1е!д 899 901 905 906 906 909 915 917 917 918 919 920 922 922 923 924 925 926 931 931 950 953 954 954 960 960 983 988 990 990 992 994 994 996 997 998 999 1000 1001 1003 1005 1006 Содержание 23.
Создание именованного итератора Создание обобщенного итератора Инициализаторы коллекций Глава 28. Сетевые средства подключения к Интернету Члены пространства имен Бувгет.Ь)ег Универсальные идентификаторы ресурсов Основы организации доступа к Интернету Класс ЪЧеЬнег)оевт Класс ЪЧеЪйевропве Классы Нттр)л)еЬКес)иевг и Нтгр)'теЪКезропве Первый простой пример Обработка сетевых ошибок Исключения, генерируемые методом СгеагеО Исключения, генерируемые методом СетИевропвеО Исключения, генерируемые методом СегКевропзе5ггеашО Обработка исключений Класс 1)г) Доступ к дополнительной информации, получаемой в ответ по протоколу НТТР Доступ к заголовку Доступ к сооЫе-наборам Применение свойства ).авгМог))бес) Практический пример создания программы МпиСгаи 1ег Применение класса )ЛГеЬС1)епт Приложение. Краткий справочник по составлению документирующих комментариев Дескрипторы ХМЬ-комментариев Компилирование документирующих комментариев Пример составления документации в формате ХМ1.
Предметный указатель 1006 1008 1009 1011 1012 1013 1014 1015 1017 1018 1018 1021 1021 1022 1022 1022 1024 1025 1026 1027 1029 1030 1034 1039 1039 1041 1041 1044 Об авторе Герберт Шилдт (НегЬегг ВсЬ!1Ж) является одним из самых известных специалистов по языкам программирования СФ, Сн., С и )аиа. Его книги по программированию изданы миллионными тиражами и переведены с английского на все основные иностранные языки. Его перу принадлежит целый ряд популярных книг, в том числе Полами сарово ~ник но )аои, Полный справочник ио Сч+, Полная справочник по С (все перечисленные книги вышли в издательстве "Вильямс" в 2007 и 2008 гг.).
Несмотря на то что Герберт Шилдт интересуется всеми аспектами вычислительной техники, его основная специализация — языки программирования, в том числе компиляторы, интерпретаторы и языки программирования роботов. Он также проявляет живой интерес к стандартизации языков. Шилдт окончил Иллинойский университет и имеет степени магистра и бакалавра. Связаться с ним можно, посетив его веб-сайт по адресу ннн.НегЬБсЬЬ1с!с.совь О научном редакторе Майкл Ховард (М(сЬае! Ночиагг() работает руководителем проекта программной защиты в группе техники информационной безопасности, входящей в подразделение разработки защищенных информационных систем (ТччС) корпорации М!сгово11, где он отвечает за внедрение надежных с точки зрения безопасности методов проектирования, программирования и тестирования информационных систем в масштабах всей корпорации. Ховард является автором методики безопасной разработки (Бесит)Гу Рече!ортепг 1л(есус!е — БРЕ) — процесса повышения безопасности программного обеспечения, выпускаемого корпорацией М1сговоас Свою карьеру в корпорации Мгсговой Ховард начал в 1992 году, проработав два первых года с ОС Х(пг(отче и компиляторами в службе поддержки программных продуктов (Ргос(исг Биррогг Еегч(сев) новозеландского отделения корпорации, а затем перейдя в консультационную службу (М(сгоао11 Сопви)11пя Яегч(сев), где он занимался клиентской поддержкой инфраструктуры безопасности и помогал в разработке заказных проектных решений и программного обеспечения.
В 1997 году Ховард переехал в Соединенные Штаты и поступил на работу в отделение ('чгшдоччв веб-службы 1пГегпег 1п1оппагюп Еегн!сев, представлявшей собой веб-сервер следующего поколения в корпорации М1сгово(1, прежде чем перейти в 2000 году к своим текущим служебным обязанностям. Ховард является редактором журнала 1ЕЕЕ Евсиг11у Ег Рпиасу, часто выступает на конференциях, посвященных безопасности программных средств, и регулярно пишет статьи по вопросам безопасною программирования и проектирования программного обеспечения.
Он является одним из авторов шести книг по безопасности информационных систем. 26 Предисловие распределенное программирование и применяется промежуточный код для обеспечения безопасности и переносимости, но отличия кроются в деталях реализации. Кроме того, в обоих языках предоставляется немало возможностей для проверки ошибок при выполнении, обеспечения безопасности и управляемого исполнения, хотя и в этом случае отличия кроются в деталях реализации. Но в отличие от )ача, язык С№ предоставляет доступ к указателям — средствам программирования, которые поддерживаются в С--ь. Следовательно, С№ сочетает в себе эффективность, присущую С-ьь, и типовую безопасность, характерную для )ача. Более того, компромиссы между эффективностью и безопасностью в этом языке программирования тщательно уравновешены и совершенно прозрачны.
На протяжении всей истории вычислительной техники языки программирования развивались, приспосабливаясь к изменениям в вычислительной среде, новшествам в теории языков программирования и новым тенденциям в осмыслении и подходе к работе программистов. И в этом отношении С№ не является исключением. В ходе непрерывного процесса уточнения, адаптации и нововведений С№ продемонстрировал спосооносгь быстро реагировать на потребности программистов в переменах. Об этом явно свидетельствуют многие новые возможности, введенные в С№ с момента выхода исходной версии 1.0 этого языка в 2000 году.
Рассмотрим для примера первое существенное исправление, внесенное в версии С№ 2.0, где был введен ряд свойств, упрощавших написание более гибкого, надежного и быстро действующего кода. Без сомнения, самым важным новшеством в версии С№ 2.0 явилось внедрение обобщений. Благодаря обобщениям стало возможным создание типизированного, повторно используемого кода на С№. Следовательно, внедрение обобщений позволило основательно расширить возможности и повысить эффективность этого языка. А теперь рассмотрим второе существенное исправление, внесенное в версии С№ 3.0. Не будет преувеличением сказать, что в этой версии введены свойства, переопределившие саму суть С№ и поднявшие на новый уровень разработку языков программирования. Среди многих новых свойств особенно выделяются два следующих: Е11Щ и лябмда-выражения.
Сокращение !.11Щ означает язык интегрированных заяросов. Это языковое средство позволяет создавать запросы к базе данных, используя элементы С№. А лябмда-выражения — это синтаксис функционалов с помощью лямбда-оператора =>, причем лябмда-выражения часто применяются в Е1Ъ!О-выражениях. И наконец, третье существенное исправление было внесено в версии С№ 4.0, описываемой в этой книге. Эта версия опирается на предыдущие и в то же время предоставляет целый ряд новых средств для рационального решения типичных задач программирования. В частности, в ней внедрены именованные и необязательные аргументы, что делает более удобным вызов некоторых видов методов; добавлено ключевое слово оуоат№с, упрощающее применение С№ в тех случаях, когда тип данных создается во время выполнения, например, при сопряжении с моделью компонентных объектов (СОМ) или при использовании рефлексии; а средства ковариантности и контравариантности, уже поддерживавшиеся в С№, были расширены с тем, чтобы использовать параметры типа.