ПОСИКС семафори са Ц програмирањем

Posix Semaphores With C Programming



ПОСИКС се односи на преносиви интерфејс ОС -а, који је ИЕЕЕ стандард, развијен да помогне преносивост различитих апликација. ПОСИКС је покушај изградње заједничке стандардизоване верзије УНИКС -а кроз сарадњу добављача. Олакшало би преношење апликација међу хардверске платформе ако су ефикасне. Хевлетт-Пацкард интегрише ПОСИКС у лиценцирану МПЕ/иКс ОС верзију 5.0 и ХП/УКСКС верзију 10.0 (УНИКС).

Стандард ПОСИКС има много више од десет делова, међутим два су лако доступна. ПОСИКС.1 описује интерфејсе за програмирање Ц (тј. Библиотеку системских позива) за датотеке, процедуре и И/О терминале. Библиотека пакета Ц ПОСИКС за ПОСИКС платформе је оквир стандардне библиотеке Ц. Ово је успостављено истовремено са стандардним АНСИ Ц. Да би ПОСИКС био усклађен са стандардом Ц, учињено је неколико покушаја. ПОСИКС пружа додатне функције онима које су имплементиране у стандарду Ц.







ПОСИКС Семафори

Семафор је структура података која се често користи за синхронизацију процеса и помагање нити без њихове међусобне интеракције ради заједничког рада. Интерфејс за семафоре одређен је стандардом ПОСИКС. Није део Птхреадс -а. Међутим, већина УНИКС -ова који подржавају Птхреадс чак пружају семафоре. У оквирима налик Уник-у, попут Линука, семафори се спајају са редовима порука и заједничком меморијом испод услуга међупроцесне комуникације (ИПЦ). Старији оквирни В семафори и савремени ПОСИКС семафори постају две врсте семафора. ПОСИКС Семапхоре позиви су много лакши од Систем В Семапхоре позива. Мада је лакше добити семафоре Систем В, посебно на ранијим Уник-овим платформама. Постоји потреба за повезивањем програма помоћу ПОСИКС семафора на библиотеку Птхреад. У овом чланку ћемо погледати ПОСИКС семафоре.



Зашто ПОСИКС семафори?

Постоји велики проблем око нити, а то је стање трке. То је околност у којој две нити настоје да добију и измене исте информације, чинећи их тако сукобљеним. Да бисмо избегли услове трке, семафоре смо користили веома дуго.



Семафори су доступни у 2 врсте:





Бинарни семафор :

Такође је препозната као мутек брава. Имао би само две могуће вредности, 0 и 1. Вредност ће бити иницијализована као 1. Користи се за примену бројних процеса за решавање озбиљног проблема одељка.



Бројање Семафора :

Његова величина може варирати у неограниченом домену. Користи се за овлашћење над приступом бројним ресурсима.

Линук ПОСИКС оквир има интегрисано спремиште Семапхоре. Да бисмо га користили, морамо:

  • Додајте семапхоре.х
  • Накупите код повезивањем са -лптхреад -лрт.

Готово све методе и облици ПОСИКС Семапхоре прототипирани су или специфицирани у „Семапхоре.х“. Користићемо Семафор за опис ентитета или објекта као:

>>сем_т сем_наме;

Ево различитих функција које бисмо користили у ПОСИКС Семапхоре -у.

Сем_инит

Да бисте покренули семафор, морате користити метод сем_инит. У овој функцији сем одговара иницијализираном објекту семафора. Псхаред је банер или застава која одређује да ли се семафор може делити са форкед () процедуром или не. ЛинукТхреадс тренутно не подржава заједничке семафоре. Вредност аргумента је почетна вредност на коју је семафор фиксиран.

>> интсем_инит(сем_т*сем, интпсхаред, непотписано интвредност);

Сем_ваит

Користићемо метод сем-ваит за задржавање/закључавање семафора или његово чекање. Ако је семафору дата негативна вредност, циклус позива ће се аутоматски блокирати. Кад год нека друга нит позове сем_пост, буди се један од већ зачепљених процеса.

>> интсем_ваит(сем_т*сем);

Сем_пост

Користићемо метод сем_пост за повећање вредности семафора. По позиву, сем_пост ће повећати вредност и буди се један од већ зачепљених процеса или процеса чекања.

>> интсем_пост(сем_т*сем);

Сем_гетвалуе

Ако желите знати о вриједности семафора, морате користити доњу функцију сем_гетвалуе. Добиће садашњу вредност семафора и биће постављен на одредиште усмерено на валп.

>>Инт сем_гетвалуе(сем_т*сем, инт *штене);

Сем_дестрои

Требали бисте користити метод сем_дестрои ако желите уништити семафор. Ако нестанак семафора треба да се настави, ниједан нит неће чекати у семафору.

>>Инт сем_дестрои(сем_т*сем);

Инсталирајте ГЦЦ Утилити

Да бисте компајлирали ПОСИКС Семапхоре Ц код, морате имати инсталиран услужни програм гцц у свом Линук систему. У ту сврху отворите командни терминал и испробајте наредбу испод.

$судо апт-гет инсталл гцц

Потврдите своју радњу ударцем И .

Имплементација ПОСИКС Семапхоре -а са Ц програмирањем у Убунту -у

На самом почетку морате да креирате нову датотеку са .цпп екстензијом на систему Убунту 20.04. Да бисте то урадили, морате се кретати према свом матичном директоријуму и креирати нову празну датотеку под именом нев.цпп. Такође га можете креирати помоћу команде на додир у вашем командном терминалу.

Можете видети да је датотека нев.цпп креирана у кућном директоријуму.


Након креирања .цпп датотеке, отворите је као уређивач текста у вашем Линук систему и упишите доњи код у ову датотеку каква јесте. Након тога сачувајте и затворите.

Извршите ПОСИКС Семапхоре Ц програм у Убунту 20.04

Отворите свој терминал У Убунту 20.04 и изведите доњу наредбу гцц иза које следи назив датотеке.

$гцциме датотеке.ц –лптхреад –лрт

Формиране су 2 нити, једна се формира након 2 секунде друге. Након примања вијка, први навој спава 4 секунде. Дакле, након што је позвана, друга нит се неће директно придружити, а то ће се појавити 4-2 = 2 секунде након што је позвана. Ево излаза:

Да нисмо користили семафор, према промени контекста, резултат би могао бити следећи:

Закључак

У овом водичу је дат детаљан преглед употребе ПОСИКССемапхоре -а са Ц програмирањем у Убунту 20. Коришћењем ПОСИКС или Птхреад библиотеке у одређеном Ц коду, ПОСИКС Семапхоре може се прилично лако користити за спречавање тркачких услова током кодирања.