C programavimas

POSIX semaforos su C programavimu

POSIX semaforos su C programavimu

POSIX reiškia OS nešiojamą sąsają, kuri yra IEEE standartas, sukurtas padėti perkelti įvairias programas. „POSIX“ yra pastangos sukurti bendrą standartizuotą UNIX versiją bendradarbiaujant su tiekėjais. Tai palengvintų programų perkėlimą tarp aparatinės įrangos platformų, jei jos būtų veiksmingos. „Hewlett-Packard“ integruoja POSIX į savo licencijuotą MPE / iX OS 5 versiją.0 ir 10 / HP / UXX versija.0, atitinkamai (jo UNIX).

„POSIX“ standarte yra daug daugiau nei dešimt dalių, tačiau dvi galima lengvai įsigyti. POSIX.1 aprašomos C programavimo sąsajos (t.e., sistemos skambučių biblioteka) failams, procedūroms ir įvesties / išvesties terminalams. C POSIX paketų biblioteka, skirta POSIX platformoms, yra C standartinės bibliotekos karkasas. Tai nustatoma tuo pačiu metu kaip ir standartinis ANSI C. Kad POSIX atitiktų C standartą, buvo bandyta keletą kartų. POSIX suteikia papildomų funkcijų, be tų, kurios įdiegtos standartiniame C.

POSIX semaforai

Semaforas yra duomenų struktūra, dažnai naudojama procesams sinchronizuoti ir gijoms padėti be jų sąveikos tarpusavyje veikti kartu. Semaforų sąsają nurodo POSIX standartas. Tai nėra „Pthreads“ dalis. Tačiau dauguma UNIX, palaikančių „Pthreads“, pateikia net semaforus. „Unix“ tipo sistemose, tokiose kaip „Linux“, semaforai sujungiami su pranešimų eilėmis ir bendrąja atmintimi po „Interprocess Communication“ (IPC) paslaugomis. Senesnės „V“ pagrindo semaforos ir šiuolaikinės „POSIX“ semaforos tampa dviejų tipų semaforomis. POSIX skambinimas semaforais yra daug lengvesnis nei V sistemos Semaforo skambučių. Nors „System V“ semaforas yra lengviau gaunamas, ypač ankstesnėse „Unix“ tipo platformose. Reikia susieti programas, naudojančias POSIX semaforas, prie Pthread bibliotekos. Šiame straipsnyje apžvelgsime POSIX semaforus.

Kodėl POSIX semaforos?

Yra didelis klausimas dėl gijų, tai yra „lenktynių būklė“. Tai yra aplinkybė, kai dvi gijos siekia gauti ir pakeisti tą pačią informaciją, todėl daro ją prieštaringą. Kad išvengtume varžybų sąlygų, mes jau seniai naudojame semaforus.

Semaforai yra dviejų rūšių:

Dvejetainis semaforas:

Jis taip pat pripažįstamas kaip „mutekso“ spyna. Tai turėtų tik dvi galimas reikšmes: 0 ir 1. Vertė bus inicijuojama kaip 1. Jis naudojamas vykdant daugybę procesų, norint išspręsti rimtą skyrių problemą.

Skaičiuojant semaforą:

Jo dydis gali skirtis neribotame domene. Jis naudojamas norint turėti prieigą prie daugybės egzempliorių išteklių.

„Linux POSIX“ sistemoje yra integruota semaforų saugykla. Norėdami jį naudoti, turime:

Beveik visi POSIX semaforų metodai ir formos yra prototipai arba nurodyti skiltyje „Semaforas.h '. Semaforą naudosime apibūdindami objektą ar objektą kaip:

>> sem_t sem_name;

Čia yra skirtingos funkcijos, kurias mes naudotume POSIX semaforuose.

Sem_init

Norėdami inicijuoti semaforą, turite naudoti sem_init metodą. Šioje funkcijoje sem atitinka inicializuotą semaforo objektą. „Pshared“ yra reklamjuostė arba vėliava, nurodanti, ar semaforą galima bendrinti su išsišakojusia () procedūra, ar ne. Šiuo metu „LinuxThreads“ nėra sutvarkiusi bendrų semaforų. Argumento reikšmė yra pradinė vertė, prie kurios fiksuojama semaforas.

>> int sem_init (sem_t * sem, int pshared, nepasirašyta int reikšmė);

Sem_wait

Mes naudosime sem-wait metodą semaforui laikyti / užrakinti arba priversti jį laukti. Jei semaforui suteikta neigiama reikšmė, skambučių ciklas bus automatiškai blokuojamas. Kai bet kuri kita gija iškviečia sem_post, pabunda vienas iš jau užsikimšusių procesų.

>> int sem_wait (sem_t * sem);

Sem_post

Semaforo vertei padidinti naudosime sem_post metodą. Paskambinus sem_post padidins vertę ir vienas iš jau užsikimšusių ar laukiančių procesų pabus.

>> int sem_post (sem_t * sem);

„Sem_getvalue“

Jei norite sužinoti apie semaforo vertę, turite naudoti žemiau pateiktą funkciją sem_getvalue. Jis gaus dabartinę semaforo vertę ir bus dedamas į tašką, į kurį nukreipta valp.

>> Int sem_getvalue (sem_t * sem, int * valp);

Sem_destroy

Jei norite sunaikinti semaforą, turėtumėte naudoti sem_destroy metodą. Jei semaforo žlugimas bus tęsiamas, semaforo nelaukia nė viena gija.

>> Vid sem_destroy (sem_t * sem);

Įdiekite „GCC Utility“

Norėdami sukompiliuoti POSIX Semaforo C kodą, turite įdiegti „gcc“ įrankį savo „Linux“ sistemoje. Šiuo tikslu atidarykite komandų terminalą ir išbandykite žemiau pateiktą komandą.

$ sudo apt-get install gcc

Patvirtinkite savo veiksmą pataikydami Y.

POSIX semaforo diegimas su C programavimu Ubuntu

Pačioje pradžioje turite sukurti naują failą su .cpp plėtinys „Ubuntu 20“.04 sistema. Norėdami tai padaryti, turite naršyti savo namų katalogo link ir sukurti naują tuščią failą pavadinimu naujas.cpp. Taip pat galite jį sukurti naudodami komandą „touch“ komandų terminale.

Matote, kad naujas.cpp failas buvo sukurtas namų kataloge.


Sukūrus .cpp failą, atidarykite jį kaip teksto rengyklę savo „Linux“ sistemoje ir šiame faile parašykite žemiau esantį kodą tokį, koks jis yra. Po to išsaugokite ir uždarykite.

Vykdykite „POSIX Semaphore C“ programą „Ubuntu 20“.04

Atidarykite terminalą „Ubuntu 20“.04 ir vykdykite žemiau esančią komandą gcc, po kurio nurodomas failo vardas.

$ gcc failo vardas.c -lpthread -lrt

Yra 2 siūlai, vienas susidaro po 2 sekundžių kito. Gavęs varžtą, pats pirmasis siūlas miega 4 sekundes. Taigi, kai jis bus iškviestas, antroji gija tiesiogiai neprisijungs ir tai pasirodys 4-2 = 2 sekundės po to, kai bus iškviesta. Štai išvestis:

Jei nebūtume naudoję semaforo, pagal konteksto keitimą, rezultatas galėjo būti toks, koks pastebimas:

Išvada

Šiame vadove pateikta išsami „POSIXSemaphore“ su „C“ programavimo „Ubuntu 20“ apžvalga. Tik naudojant POSIX arba Pthread biblioteką visame tam tikrame C kode, POSIX semaforą galima gana lengvai naudoti siekiant užkirsti kelią lenktynių sąlygoms koduojant.

Peržiūrėkite pelės mygtukus skirtingai programinei įrangai naudodami „X-Mouse Button Control“
Galbūt jums reikia įrankio, kuris galėtų pakeisti jūsų pelės valdymą kiekvienoje jūsų naudojamoje programoje. Tokiu atveju galite išbandyti programą, ...
„Microsoft Sculpt Touch“ belaidžio pelės apžvalga
Neseniai skaičiau apie „Microsoft Sculpt Touch“ belaidę pelę ir nusprendė ją nusipirkti. Kurį laiką naudojęs, nusprendžiau pasidalinti savo patirtimi....
„AppyMouse“ ekrano „Trackpad“ ir pelės žymeklis, skirtas „Windows“ tabletėms
Planšetinių kompiuterių vartotojai dažnai praleidžia pelės žymeklį, ypač kai įprasta naudoti nešiojamus kompiuterius. Jutiklinio ekrano išmanieji tele...