Искусство программирования на Си (984073), страница 84
Текст из файла (страница 84)
ноьв Иувргяергосеяя( Ргосеяя *р, гпе пппЬегвйве11оя, гпг *ррхпьяьее ] вместного использования данные. П сим шсством комвме н оис о д Р' >' Система ) (ЧМО5 Тоо(5е( в большей степени является ( мУникационных каналов ЯвлЯстсЯ авгоматически статической. Она об спечивастстатич кое раси едслегпе встросннаЯ синхронизаш»Я. Когла ланныс получены, ние задач по процессорам во время сборки программы (ог ( г=в; г < пипЬегОСВе11оя; 1+о ) они мог>т быть обработаны немею!енно, посколькУ яв-,, ф,р нн !й текстовый файл.
Спсцифп( через кон игурационный текстовый айл. '.псци ирг(пс(( ''Ве11о Вог1д' пипЬег та Скоп ргосеяя Ьр(п*, х, р ); лаютса полной копией отправленных данных. чсскис комм>никационныс связи межл> залачами являДла прелставлсниа коммуникационной свЯзн меж- ются лополнительным важным свойством конфигураци- »РР>п1явед = 1; лу паРаллельными процессами система !)(МО5 Тоо!5с! онцого фаила. Для соединения двух залач можно ) пользует т!1п ла ных СЛв е! (канжч) Этот "'4'ь- 1„поль ювать команды, подобные следующим: ный тип всегда однонаправленный; это означает, что он 1пе пагп( яо)В ) имеет один фиксированныи посылающий конец и один оопппсе еаяк1.6аеатприе еи еаякг.ааеяоиериен ( фиксированныи принимающий конец.
Двунаправленная Злесь(ая(4(, тая)42, да(а(прп( и 4)а(аОВ(рп( — эчо имс>пг ЬрпгяЬед = 0; коммуникация требует двух выделенных однонапРав- на, определенные программистом в других местах кон- /(оакиииа~е«и«ие«и<чаи~и«ее<иере>)е«и Ра - «спада Парамемиаи обработка ! Часть и! Глава 28 Листинг 28.2. Использование канальной коммуникации. Ниже привсдсн вывод этой программы: ток лишь записывает в лсремснн> ю некоторое значение, а др>той лишь считывает его. 4кпс1пде <нсд1о.Ь> Нека'а СЬе ркочкам оперпе: АддТчоркос: кесекчед ппяЬек 10 Если же два потока должны делать запись в одну и (кпс1пбе <ркосеая.Ь> /* Раснвревия нзнка С для использования потоков н каналов */ накп« еепд 10 аэд тесе(чед 12 ту жс переменную параллельно, то лланировшик потоАддтчоркос« кесекчед ппнЬек 9 кон решил бы, скорее,на случаинои основе, какое зна/« накп: эепд 9 апб кесекчед 11 чснис лоступно в какое время.
Давайте вернемся к при** Этот поток будет добавлять 2 к целой величине, получаемой через входной АддТчоркос« кесекчед ппнЬек 8 «* канал, и отправлять результат через вякодиой канал. ваки: яепд 8 апд кесекчед 10 Лопученве числа 0 будет заканчивать поток. АдбТчоркос тесекчед пчнЬек 7 два потока, добавлнюшис объекты данных в один совмс«/ пакле эепд 7 апд кесекчед 9 стно используемый буфер.
Такой б>фср может солсрчо>д АддТчоркос( Ркосенн 'р, Сьаппе1 «(прес, СЬаппе1 *оч1рпе ) Аддтчоркос« кесе1чед ппнЬек 6 жать, налрил«ср,массив для хранения объектов данных ( иакп« эепд 6 аед кесекчед 8 в определенной последовательности и располагать счет(пт ппяЬек 17 АддТчоРкос« кесекчед ппэЬек 5 чиком, указываюшим на следуюший д , у на следуюший доступный индекс ваки: аепд 5 апд кесекчед 7 чЬ71е ( ппяЬек !- "0 АдбТчоРкос: кесекчеб ппнЬек массияа для его хранения след> юшего объекта данных. ( накп: непд 4 апд кесекчед 6 Сохранение объекта данных выполняется в три азана: СЬап1п( (прас, ЬппнЬек, н1кеос(кпс) ); АддТчоркос« кесекчед ппнЬек 3 !. Проверка наличия свободного места в буфере.
рккпсс( АддТчоркос« кесекчед ппаЬек ед>п , ппнЬек ); яа1п: непд 3 апд тесе>чеб 5 к( ( пшвЬек 1= 0 ) АддТчоркос! кесекчед ппнЬек 2 2. Сохранение объекта данных в массиве на свободваки« эепб 2 апд кесекчед 4 ном в данный момент мсстс. ппяЬек += 2! Абдтчоркос« кесекчед ппнЬек 1 ) ва1п: аепд 1 апд кесекчед 3 >. Увеличение на единиц> счетчика занятого лростран- /)араллельнан алраромна Донолнинеаеьные «неон«ни««ение рах)неы ЩД— Часть й! Резюме оогб Весдпбдьогевгос( Ргосева *р, СЬаппе1 «ркесСЬап, Вп((ег *рвот ) ( гпс гекпгпсоде; Паса йасаОЬ)есс( ыЬг1е ( 1 ) ( /* Попучев один объект даивых */ СЬап1п ( ркесСЬап, Кдасаоп)ест, а(хео((баеаоь)есс) /* Попытка сохранить объект данных в буфере */ геснгпсобе = ледвагатовпу(ег( рвп(, ьеагаоь)есг ]г гб ( гекпгпсобе !ы П ) ( рггпг([ БВЛОВ: Ьп((ег итоге 1а(1ед рп баСа обзесс 1овс(п" ); ) Мсханизм синхронизации требует зарезервировать Суребе( аггост Ьпууег о поступ к буферу перед фактическим доступом к нему.
Эта глава охватывает основные концепции параллельной обработки в режимах многозалачности и многопоточности. Многозадачность описывает раздсльныс параллсльныс программы, в то врелгя как потоки представляют собой параллельные субкомпонснты общего потока. Задачи являются принципиально независимыми и могут выполняться на различных процессорах, в то время как потоки совместно используюз среду породившей ил задачи. Коммуникационные каналы обеспечивают удобный и синхронный п)ть для обмена данными между задачами и потоками.
В сл>час нескольких задач имсстся лишь незначительная возможность совместно использовать данные или она отсутствует вообще, в то время как потоки безусловно могут совместно использовать поступ к объектам данных. Если объекты ланных разделяются между потоками, должсн пспольюваться мсланизм синхронизации в форме семафоров для уверенности в том, что параллельный поступ к олному и тому жс обьекту данных нс приведет в результате к нсожиданным коллизиям.
В ЭТОЙ ГЛАВЕ ° Новос в стандарте С99 ° Нотсрянньге возможности ° Изменения по сравнению с С89 Ваиядвбэоущгг Г99 Глава 29 В згляд в будущее' С99 Базовые типы асмо. Влияние такой особенности, как полагают, будет щсс. ~.ээ В С99 " В 1, ограниченным, но, тем не менее, появил |сь ~гсобходи- В стандарт С99 ялсден новый тип Воо1, который яв- ность а наличии гарагиированно максимального пелолястся булеяым типом.
Как правило, требуется вклю- го тгтпа, поэтому в С99 введен пелочисленный тип макчить а программ> файл (агббоо).Ь> и ссылаться на него сил~альной длины — !лешах г. Этот тип должен как на Ьоо!. Единственной причинои, по которой этот сугдестеовать на всех системах, и его длина нс должна тип нс назван Ьоо!, является тот факт, чго сушсствую- быть меньше мины любого лр) гого типа. Аналогично шис колы имеют макросы с такими пмснамн. В)лса тин в С99 теперь имеется тип !пгргг ! — пелый тип, кото- обладает яссми необходимыми возможностями.
преоб- рый может содержать указатель, если таковой имеется. разованис а Воо! лает значение !!) для любого зг~ачеПитер Сибеч Нскозорыс платформы не будут иметь тгша, достаточния, не равного нулю, и (0) — в противном случае. Это но большого лля прслстааления произаольныл значений нс изменяет существующего праяила языка С, согласно указателей; я таком случае тип Ыр!г ! на них отсутстяукоторому.
если значение выражения равно нулю, то а ст. В команде РНп!Г появился новый флаг формата, кооператорах !Г, иЫ!е и Гог оно будет иметь значснис торьш соответствует типу !я!шах !. Он б)дет рассмот"ложь". рсн лалее в этой глаес в разлсле "Новые свойства ПРИМЕЧАНИЕ станлартнои библиотеки" Макрос, который определяет, что Ьоо! соответствует В стандарт С99 еислсно также большое количестао Воо), не присутствует ни в одном старом заголовочном тиПОВ, наЗВаНИя КОтсрых яЫГЛядят как!П!)у г, наприМЕр В даал,то ..
б даалпатом веке вскоре после изобретения бсзлошад- НОВОВ и ЕТВВппгчто г 00 флипе поскольку это огло бы повлиять на работоспо- !пгб4 ! !ггг32 ! и т д Это "точные" типы. Так тип НОВОВ В ЕТВВДДгчТВ С99 собность существующего кода; необходимо явно петр Лппппнище энне п>енам ические рп >ахеи В>гпнд и бубуенее С>>9 файф Мас>ъ й! Глава 29 Такое большое количество целочисленных типов ц снных типов вильным, хотя и нс предложил др>гой альтернативы. Но (Если вас удназяет, что эгот спсцификатор нс на- Нйборвимввпвв было введено для того, чтобы дать возможность п оожность про- в С99 такая возможность предусмотрена.
В С99 приве- зван как-нибуль более на>ладно, например,%шб пояс В и н Г ! л Н граммистам лля часто используемых типов применять ленная выше чашь п ог аммы б ет вы я т Р Р >д т в >глядеть следу- ним, !тосуш вую! ая ре иза я использует%в в ка- суше.твенно. Некоторыс из этих изменений у ° были стандартныс имена. В целом ряде сушествуюших про- юшим образом: грамм имеются вложенные конструкции №1(беГ, которые частью стандарта. Они были ввелсны в поправках к аскоса Еоо( 2> ба лс комплект взаимосвязанных Функций стандарту в 90-х голах. Однако поддержка Расширсиныл вводят "32-битовый целочисленный тип" или "целочисше >аа! увсапГ, т(асан(и хкасапГ.