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

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

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

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

Но если он создается с именем, то такой объект мосек используется между несколькими процессами и реализуется с применением объекта ядра ЧЧп32 — одного нз наиболее тяжеловесных объектов блокировки. Под этим понимается то, что это наиболее медленный и требующий максимальных накладных расходов объект, когда он используется для защиты ресурсов от управляемых потоков. другие типы блокировок, такие как классы ееасгегиг1сегьоск и мопгсог, предназначены для работы только в пределах одного процесса. Поэтому в интересах эффективности объект Мпсех должен использоваться только тогда, когда действительно требуется синхронизация выполнения или доступа к некоторым ресурсам между несколькими процессами. Как и другие высокоуровневые объекты синхронизации, мосек является реентерабельным.

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

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

Рекомендуется основывать имена на строковой форме идентификатора СЛЛП, сгенерированного утилитой ОО1ООЕИ.ехе. 396 Глава (2 На заметку! Как уже упоминалось, имена объектов ядра являются глобальными для всей системы. Данное утверждение не вполне соответствует действительности, если рассмотреть быструю смену пользователей в ГМпбоиз и терминальные службы (Тепп(па! Веплсез).

В таких случаях пространство имен, содержащее имя этих объекюв ядра, создается для каждого зарегистрированного пользователя. В ситуациях, когда действительно необходимо, чтобы имя существовало в глобальном пространстве имен, его следует снабдить префиксом — специальной строкой 161о)за 1. Дополнительную информацию можно найтт в книге Марка Руссиновича (Маг)г Е. Вцзз(пот(с)!), дэвида соломона (Оаиб А. Яо)опюп) и Алекса ионеску (А(ех (опезсц) м)сгозой иг)пгтоигз (лгегпа(з, Р)ГГП Еойюп: (псlиг((лд ИГ(пг(оигз Вепгег 2000 апг( Ийпг(оие Из(а (М)сгозой Ргезз, 2009 г.).

Если все, что касается объектов Мскех, покажется хорошо знакомым для имеющих опыт разработки йггп32. то это объясняется тем, что лежащий в их основе механизм фактически является объектом Мосек из йт!п32. В действительности через свойство Багеназснапп1е, унаследованное от базового класса назснапп1е, получается дескриптор операционной системы.

Дополнительные сведения о классе нэ!. снап г(1е можно найти в разделе "Объекты синхронизации Ъг!п32 и хазснапс)1е", где рассматриваются его достоинства и недостатки. Важно отметить, что поскольку объект мпгех реализуется на основе мьютекса ядра, это влечет за собой переключение в режим ядра при каждой манипуляции или ожидании с использованием мцгех. такие переходы чрезвычайно медленны и должны быть сведены к минимуму, если разрабатывается критичный ко времени код. Совет. По возможности избегайте применения объектов режима ядра для синхронизации между потоками одного и того же процесса. Отдавайте предпочтение более легковесным механизмам, таким как класс мопьсог или 1пгег1оскег!.

Но при необходимости синхронизации потоков между разными процессами нет другого выбора, кроме как использовать объекты ядра. Простые тесты показывают, что применение мцгех требует в 44 раза больше времени, чем класс 1пгегьосхег(, и в 34 раза больше, чем класс мосек. Семафоры В . НЕТ Ргагпеиюг)г семафоры поддерживаются с помощью класса Я уз сев.

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

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

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

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

Ранее в разделе "Класс Моптгог" был представлен несовершенный пул потоков по имени СгибеТЬгеаброо1, и было указано, почему Монт Тот не является лучшим механизмом синхронизации, который можно использовать для реализации сгис)етЬтеас(Роо1. Ниже приведен несколько модифицированный класс С гис(еТ)1 геас)Роо1, где для синхронизации применяется БеварЬоге. Код класса С гибеТЬгеаброо1 служит только в качестве примера. В реальных приложениях следует отдавать предпочтение системному пулу потоков. который будет описан ниже. иятпд БуяТев; ив1пд Буягеп.ТЬгеабтпдг иятпд БувТеп.Со11есг1спвг риЬ1тс с1авя СгибеТЬтеабРоо1 ( вгвгтс теабсп1у тпТ Махиог)стнгяабв = 4) ягагтс теабоп1у гпг ИатТТтпеоиг = 2000г риЬ1тс бе1едаТе чотб Хогнсе1едаТе()) риЬ11с СгибеТЬтеабРос1() ( втор = Та1вег вепарьоге = пем Беварьоге( О, №пс.иахча1ие )) нсгндиеие = пен Яиеие(); ТЬгеабв = пен ТЬгеаб[ Махиотнтнгеабя Тот( гпТ т = О; т < Махиог)стнгеабяг +ь1 ) ( ТЬтеабя[т] пвн ТЬтеаб( пен ТЬгеабзгагг(ТЬтя.ТЬтеабуипс) ) Тсгеабя[т).БТвгТ()," рттчаге чотб ТЬгеабГипс() ( бо ( 11( ]вТор ) Хог)сое1едаге ног)с1Теп = пи11; 1№( яеварьоге.иа1ТОпе(Иа1ТТ1ваоис) ) ( // Обработать элемент из начала очереди.

1ос)с( ногТЯиеие ) ( ногн1геп = (Хог)сое1едаге) ног)сдиеие.оедиеие() ) ног)с1Теп () ) нк11е( )ягор ) ) ривутс чогб БиЬпТТХогн1геп( Иог)ссе1едате тТеп ) ( 1ос)с( ногТОиеие ) ног)сдиеие.епдиеие( ттеп ) 1 ) веварьоге.ка1еаве()г ) 398 Глава 12 риЬ11с чогб Яписбонп () ( ягор = ггие; ) ргачаве Яеваркоге веваркоге; рггчаге Сиене иогЬСиеиев рг1часе Тпгеаб[) Гпгеабв; рггчаве чо1аГ11е Ьоо1 есор! ) риЬ11с с1авв ЕпсгуРогпГ ( всасас чотб Иог)грипсГ1оп() ( Сопво1е.Хг1Геьгпе( "Метод Хоггрипссгоп() вызван на потоке (О)", Тпгеаб.сиггепстпгеаб.Мапаиег(ТЬгеаб10 )в всав1с чогб Магп() ( Стиг(етпгеаброо1 роо1 = пеи СгибеТЬгеабРоо1(); Тот( 1пг 1 = 0; 1 < 10; е+1 ) ( рос 1 .

ЯиЬт1ГИогя1Геи ( пен Стиг(етпгеабРоо1.Хог)гпе1еиасе( ЕпсгуРоапГ.Иогярипссгоп) ) ) !/ Задержка для эмуляции выполнения данным потоком другой работы. Тпгеаб.Я1еер( 1000 ); роо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
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7057
Авторов
на СтудИзбе
258
Средний доход
с одного платного файла
Обучение Подробнее