Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 106

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 106 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 1062019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

За счет использования яеыарЬоге класс Стиг(етпгеаг)роо1 не потеряет рабочих элементов. если они помещены в очередь до запуска потоков. Яетарпоге не может выходить за пределы значения 1пс32.Махиа1ие; однако если в очереди находится слишком много элементов при достаточном объеме памяти для их поддержки, то это свидетельствует о низкой эффективности обработки в каком-то другом месте. События В .МЕТ Ргашегчог)г вы можете использовать три типа для работы с сигнальными событиями: мапиа1еевегечепг, Аигоеевегечепг и ечепгхаагнапб1е.подобно мигех, эти объекты событий отображаются непосредственно на объекты событий м((п32.

Если вы знакомы с применением событий Ъ(((п32, то с объектами событий . МЕТ почувствуете себя как дома. Как и в случае с Митек, работа с объектами событий влечет за собой медленные переключения в режим ядра. Оба типа событий становятся сигнальными. когда кто-то вызывает метод Яес на экземпляре события. В этой точке поток, ожидающий события, освобождается. Потоки ожидают события, вызывая унаследованный метод хаагОпе — тот же самый, который вызывается для ожидания, когда мигех станет сигнальным. Утверждение.

что ожидающий поток освобождается, когда событие становится сигнальным, следует выдвигать осторожно. Возможно такое, что множество потоков могут быть освобождено, когда событие становится сигнальным. В этом фактически состоит разница между Мапиа1кевеГЕчепс и АисокевеГЕчепс. Когда Мапиа1кевеГЕчепс становится сигнальным, все ожидающие на нем потоки освобождаются. Оно остается сигнальным до тех пор. пока кто-то не обратится к его методу ревев. Если любой по- Зйногопоточность в С№ 399 ток вызывает ИаТСОпе, когда Маппа1кеяетЕчепг уже является сигнальным, то ожидание немедленно завершается успешно.

С другой стороны. объекты АцтокеяеСЕчепс освобождают только один ожидающий поток и затем немедленно автоматически переходят в несигнальное состояние. Можно представить, что все потоки, ожидающие Ацсоееяесечепт, находятся в очереди, в которой только первый поток из очереди освобождается, когда событие становится сигнальным. Однако, несмотря на то, что удобно предположить. что ожидающие потоки стоят в очереди, нельзя выдвигать какие-либо предположения о том, какой именно ожидающий поток будет освобожден первым. По причине такого поведения тип АптокеяеСЕчепт также называют собыпшем синхронизации С использованием типа Ацсоееяесечепс можно реализовать черновой пул потоков, в котором несколько потоков ожидают сигнала от АпгоаеяеГЕчепг, сообщающего.

что определенная часть работы доступна. Когда в очередь добавляется новая часть работы, событие сигнализируется, чтобы прекратить ожидание одного из потоков. Такая реализация пула потоков неэффективна и не лишена проблем. Например, ситуация усложняется, когда все потоки заняты, а элементы работы продолжают поступать в очередь, особенно если только одному потоку разрешено завершать одну единицу работы, прежде чем возвращаться в очередь ожидания. Если все потоки заняты, а тем временем, скажем, пять единиц работы находятся в очереди, событие будет сигнализировано, но ни один поток не будет пребывать в состоянии ожидания. Первый поток в очереди ожидания будет освобожден, когда вызовет Иа1СОпе, но другие — нет, даже несмотря на то, что в очереди находятся еще четыре элемента работы.

Одним из решений этой проблемы может быть запрет рабочим элементам становиться в очередь, когда все потоки заняты. Вообще-то, это не выход, поскольку при этом некоторая логика синхронизации возлагается на поток, пытающийся поместить работу в очередь, заставляя его как-то реагировать на неудачные попытки поместить единицу работы в очередь. На самом деле создание эффективного пула потоков — задача, по меньшей мере, непростая. Поэтому перед тем,как решиться приступить к ней, рекомендуется использовать класс ТпгеабРоо1.

Детальное описание класса Тпгеаагоо1 приводится в разделе "Использование ТпгеааРоо1" далее в главе. Поскольку объекты событий .НЕТ основаны на объектах событий ттттп32, их можно применять для синхронизации выполнения между несколькими процессами. Наряду с мигел, они также менее эффективны, чем альтернатива, подобная классу Мопасог, поскольку также требуют переключения в режим ядра. Однако создатели Мапца1кеяегЕчепс и АцгокеяеСЕчепг не предусмотрели возможности именования объектов событий в конструкторах, как это сделано для объекта Митек. Поэтому если требуется создать именованное событие, вместо этого следует использовать класс Ечепгна1СНапб1е,представленный в .ХЕТ 2.0.

На заметку! В библиотеке . НЕТ 40 ВСЕ появился новый тип по имени маппа1кеяегечепг311п, который представляет собой легковесную, свободную от блокировок реализацию события ручного сброса. Однако он может применяться только в межпотоковых коммуникациях внутри одного процесса. Если необходимо синхронизировать несколько потоков, вместо него следует использовать мапца1кеяесечепс или Апсоееяесечепс. Объекты синхронизации %1п32 и иа2.снат1с11е В предыдущих двух разделах рассказывалось об объектах ми тех, ма пи а 1 ее я е се ч ел г и Апсокеяесечепс. Каждый из этих типов наследуется от иа1снапо1е — общего механизма, который можно использовать в . ХЕТ Ргашевогй для управления любого рода объектами синхронизации ЪИп32.

Сюда входят не только события и мьютексы. Независимо 400 Глава (2 от того, каким образом получается дескриптор объекта Ъу(п32, для управления им можно применять объект иауснапс11е. Речь идет об управлении, а не инкопсуляг)игь потому что нласс из1снапс11е не решает, как следует, задачу инкапсуляции, да он для этого и не предназначен. Он предназначен просто служить оболочкой, которая при работе с этими дескрипторами операционной системы помогает избежать массы прямых вызовов 'тйп32 через уровень Р/(пчо)се.

Ма заметку! Стоит потратить некоторое время и разобраться, когда и как нужно использовать иавснап1е, потому что многие АР!-интерфейсы все ен(е не получили своего отображения в .мет Ргвгпеиогй а многие из них, возможно, никогда и не получат. Применение метода Иавгбпе для ожидания, когда объект станет сигнальным, уже обсуждалось. Однако класс Иа1снапс(1е имеет два статических метода, которые можно использовать для организации ожидания на нескольких объектах. Первым из них является ИаЬСНапд1е.Ха1САпу.

Емупередается массив объектов ИаЬСНапб1е,и когдалюбой из этих объектов становится сигнальным, метод ИаЬСАпу возвращает целочисленный индекс такого объекта в массиве. Вторым методом является иа1снапс11е. ХавсА11, который не возвращает управления до тех пор, пока все объекты не станут сигнальными. Для обоих методов определены перегрузки, принимающие значение таймаута. В случае вызова иавсАпу при завершении ожидания по таймауту возвращается значение, эквивалентное константе ХаЬСНапб1е. ХаЬСТЬвеаиС, В случае вызова Иа1СА11 возвращается булевское значение: Сгпе в случае, если все объекты стали сигнальными, и Та1яе— в случае выхода по таймауту. До появления класса ЕчепгиаЬСНапб1е в .МЕТ 2.0, чтобы получить именованное событие, нужно было создать лежащий в основе объект )лг(п32, а затем упаковать его в ХаЬСНапб1е, как это сделано в следующем примере: пявпд Яуягевг няьпд Яуягев.ТЬгеааьпд; нявпд Буягев.ннпС1ве.(пгегарзегчвсея) пягпд Буягев.соврапепСМоае1г пявпд М1сгаяосс.и1п32.Басеняпа1ея) рпЬ11а с1аяя Навеаечепгсгеягаг ( (О111врагС( МКЕННЕЬ32.ОЬЬ", ЕпггуРо1пС="СгеагеЕчепСИ", ЯеСЬаяСЕггаг=Стае )) ргвчаге яСагьа ехгегп ЯасеиаЬСНапб1е СгеагеЕчепС( 1пСРСг 1РЕчепСАССг1Ьпгея, Ьоо1 ЬМапна1кезеС, Ьао1 Ыпьгьа1БСаге, ягг1пд 1риаве )) рпЬ11с ягагвс АнгакеяеСЕчепг СгеагеАнгокеяеСЕчепС( Ьаа1 Ьп1СЬя1БСаге, ягг1пд паве ) ( О Создать именованное событие.

ЯагеИаЬСНяпб1е ганЕчепС = СгеагеЕчепг( 1пСРСг.вега, Та1яе, Ьп111а1ЯСаСе, папе )) 11( ганЕчепС.1я1пча11б ) ( Сигам пян Ивп32Ехсергвоп( Магяпя1.6еСЬаяСИ1п32Еггаг() ); Многопоточность в С» 401 // Создать событие управляемого типа на основе дескриптора. АстокезеГЕуепг зитонуепг = пеи АстоаезеГЕуепт( гз1зе !/ Очистить дескриптор, находЯЩийся з зотоЕтепг, !/ перед заменой его именованным дескриптором. аигоЕуепС.БасенаТСНапб1е = ганЕуепсн гегсгп аокоЕуелсн Здесь при вызове ТЧ!п32-функции Сгеатеннепсн для создания именованного события применялся уровень Р/!пуо!се, В этом примере следует отметить несколько моментов.

Например. ставка сделана полностью на безопасность дескрипторов тИп32, как это принято и в остальных классах стандартной библиотеки классов .НЕТ Ргатпесяог1с. Поэтому первым параметром Сгезкенуепт является 1пГРГг. Еего, что является лучшим способом передачи указателя НШ.Е на ошибку тйп32 для параметра ЕРБЕСОЕ1ту АТТН1НОТЕЯ. Обратите внимание.

что успех или неудача создания события определяется путем проверки свойства 1зтпнз11б экземпляра Яагенайгизпб1е. Если проверка проходит успешно, генерируется исключение типа И»гс32Ехсерт!.огс. Затем создается новый объект Аитовезетнуепт для упаковки только что созданного низкоуровневого дескриптора. Иа1тнапсг1е предоставляет свойство по имени БаТеиа11Нзпб1е,посредством которого можно модифицировать лежащий в основе дескриптор йсгп32 в любом типе-наследнике Из1тнапсг1е. На заметку! Возможно, вы заметили в документации упоминание унаследованного свойства Напсг1е. Этого свойства лучше избегать, поскольку повторное присваивание ему нового дескриптора ядра не закрывает предыдущий дескриптор, в результате чего происходит утечка ресурсов, если только не закрыть дескриптор самостоятельно.

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

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

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

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7058
Авторов
на СтудИзбе
258
Средний доход
с одного платного файла
Обучение Подробнее