Ц Програмирање

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сем_инит

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

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

Сем_цекај

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

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

Сем_пост

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

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

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

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

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

Сем_дестрои

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

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

Инсталирајте услужни програм ГЦЦ

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

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

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

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

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

Видите да је ново.цпп датотека је креирана у матичном директоријуму.


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

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

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

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

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

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

Закључак

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

Вулкан за кориснике Линука
Са сваком новом генерацијом графичких картица видимо да програмери игара помичу границе графичке верности и долазе на корак од фотореализма. Али упрко...
ОпенТТД вс Симутранс
Стварање сопствене симулације превоза може бити забавно, опуштајуће и изузетно примамљиво. Због тога морате да испробате што више игара како бисте про...
Водич за ОпенТТД
ОпенТТД је једна од најпопуларнијих игара за пословну симулацију. У овој игри морате створити диван посао превоза. Међутим, почет ћете у почетку око 1...