POSIX reiškia OS nešiojamąją sąsają, kuri yra IEEE standartas, sukurtas padėti perkelti įvairias programas. POSIX - tai pastangos sukurti bendrą standartizuotą UNIX versiją bendradarbiaujant su pardavėjais. Tai palengvintų programų perkėlimą iš aparatinės įrangos platformų, jei jos būtų veiksmingos. „Hewlett-Packard“ integruoja POSIX į licencijuotą MPE/iX OS 5.0 ir HP/UXX 10.0 versijas (UNIX).
POSIX standartas turi daug daugiau nei dešimt dalių, tačiau dvi yra lengvai prieinamos. POSIX.1 aprašomos failų, procedūrų ir įvesties/išvesties terminalų C programavimo sąsajos (t. Y. Sistemos skambučių biblioteka). C POSIX paketų biblioteka, skirta POSIX platformoms, yra C standartinės bibliotekos sistema. Tai nustatoma tuo pačiu metu kaip ir standartinis ANSI C. Kad POSIX atitiktų C standartą, buvo bandyta keletą kartų. POSIX suteikia papildomų funkcijų nei tos, kurios įdiegtos C standarte.
POSIX semaforai
Semaforas yra duomenų struktūra, dažnai naudojama sinchronizuoti procesus ir padėti gijoms, nesuderinant jų tarpusavyje, veikti kartu. Semaforų sąsaja nurodyta POSIX standarte. Tai nėra „Pthreads“ dalis. Tačiau dauguma UNIX, palaikančių „Pthreads“, netgi teikia semaforus. „Unix“ tipo sistemose, tokiose kaip „Linux“, semaforai sujungiami su pranešimų eilėmis ir bendra atmintimi, esančia tarpprocesinio ryšio (IPC) paslaugose. Senesni rėmo V semaforai ir šiuolaikiniai POSIX semaforai tampa dviejų tipų semaforais. POSIX „Semaphore“ skambinimas yra daug lengvesnis nei „System V Semafor“ skambučiai. Nors „System V“ semaforus lengviau gauti, ypač ankstesnėse „Unix“ platformose. Reikia prijungti programas naudojant POSIX semaforus prie „Pthread“ bibliotekos. Šiame straipsnyje apžvelgsime POSIX semaforus.
Kodėl POSIX semaforai?
Aplink siūlus yra didelė problema, tai yra lenktynių būklė. Tai yra aplinkybė, kai dvi gijos siekia gauti ir pakeisti tą pačią informaciją, todėl tampa prieštaringos. Kad išvengtume lenktynių sąlygų, semaforus naudojame labai ilgą laiką.
Semaforai yra dviejų tipų:
Dvejetainis semaforas :
Jis taip pat atpažįstamas kaip „mutex“ užraktas. Ji turėtų tik dvi galimas reikšmes: 0 ir 1. Vertė bus inicijuota kaip 1. Ji naudojama daugeliui procesų vykdyti, kad būtų išspręsta rimta skyriaus problema.
Semaforo skaičiavimas :
Jo dydis gali skirtis neribotame domene. Jis naudojamas norint turėti prieigą prie daugelio egzempliorių išteklių.
„Linux POSIX“ sistemoje yra integruota „Semaphore“ saugykla. Norėdami jį naudoti, turime:
- Pridėti semaforą.h
- Surinkite kodą prisijungę prie -lpthread -lrt.
Beveik visi POSIX Semaforo metodai ir formos yra prototipai arba nurodyti skiltyje „Semaphore.h“. Mes naudosime Semaforą, kad apibūdintume subjektą ar objektą taip:
>>sem_t sem_name;Čia yra skirtingos funkcijos, kurias naudosime „POSIX Semaphore“.
Sem_init
Norėdami inicijuoti semaforą, turite naudoti sem_init metodą. Šioje funkcijoje sem atitinka inicijuotą semaforo objektą. „Pshared“ yra reklamjuostė arba vėliava, nurodanti, ar semaforą galima bendrinti naudojant šakotą () procedūrą, ar ne. „LinuxThreads“ šiuo metu nesudaro bendrų semaforų. Argumento reikšmė yra pradinė vertė, prie kurios fiksuojamas semaforas.
>> tarptsem_init(sem_t*sem, tarptpshared, nepasirašytas tarptvertės);Sem_laukti
Mes naudosime sem-wait metodą, kad sulaikytume/užrakintume semaforą arba priverstume jį laukti. Jei semaforo vertė buvo neigiama, skambučių ciklas bus automatiškai užblokuotas. Kai kuri kita gija skambina sem_post, vienas iš jau užsikimšusių procesų atsibunda.
>> tarptsem_laukti(sem_t*sem);Sem_post
Norėdami padidinti semaforo vertę, naudosime metodą sem_post. Skambinus, sem_post padidins vertę, o vienas iš jau užsikimšusių ar laukiančių procesų atsibus.
>> tarptsem_post(sem_t*sem);Sem_getvalue
Jei norite sužinoti apie semaforo vertę, turite naudoti žemiau esančią funkciją sem_getvalue. Jis gaus dabartinę semaforo vertę ir bus patalpintas į skylę nukreiptą paskirties vietą.
>>Int sem_getvalue(sem_t*sem, tarpt *šuniukas);Sem_destroy
Jei norite sunaikinti semaforą, turėtumėte naudoti sem_destroy metodą. Jei semaforas žlugs, tęstųsi semaforas.
>>Int sem_destroy(sem_t*sem);Įdiekite „GCC Utility“
Norėdami surinkti „POSIX Semaphore C“ kodą, „Linux“ sistemoje turite įdiegti „gcc“ įrankį. Šiuo tikslu atidarykite komandų terminalą ir išbandykite žemiau pateiktą komandą.
$sudo apt-get install gcc
Patvirtinkite savo veiksmus smūgiu IR .
POSIX Semaforo diegimas su C programavimu Ubuntu
Pačioje pradžioje turite sukurti naują failą su .cpp plėtiniu „Ubuntu 20.04“ sistemoje. Norėdami tai padaryti, turite pereiti prie savo namų katalogo ir sukurti naują tuščią failą pavadinimu new.cpp. Jį taip pat galite sukurti naudodami jutiklinę komandą savo komandų terminale.
Galite matyti, kad naujas katalogas „failas“ buvo sukurtas namų kataloge.
Sukūrę .cpp failą, atidarykite jį kaip teksto rengyklę savo „Linux“ sistemoje ir parašykite žemiau esantį kodą šiame faile. Po to išsaugokite ir uždarykite.
Vykdykite „POSIX Semaphore C“ programą „Ubuntu 20.04“
Atidarykite savo terminalą „Ubuntu 20.04“ ir vykdykite žemiau esančią komandą gcc, po to - failo pavadinimą.
$gccfailo pavadinimas.c –liefread –lrt
Yra suformuoti 2 siūlai, vienas suformuojamas po 2 sekundžių. Gavęs varžtą, pats pirmasis sriegis miega 4 sekundes. Taigi, paskambinus, antroji gija tiesiogiai neprisijungs ir tai pasirodys praėjus 4-2 = 2 sekundėms po to, kai ji buvo iškviesta. Štai išvestis:
Jei nebūtume naudoję semaforo, pagal konteksto perjungimą rezultatas galėjo būti toks:
Išvada
Šiame vadove pateikta išsami „POSIXSemaphore“ su C programavimu „Ubuntu 20“ naudojimo apžvalga. Naudojant tik POSIX arba Pthread biblioteką tam tikrame C kode, POSIX Semaforas gali būti gana lengvai naudojamas siekiant užkirsti kelią lenktynių sąlygoms kodavimo metu.