POSIX viitab OS-i kaasaskantavale liidesele, mis on IEEE standard, mis on välja töötatud erinevate rakenduste kaasaskantavuse hõlbustamiseks. POSIX on püüd luua tarnijate koostöös UNIX-i ühine standardiseeritud versioon. See muudaks riistvara platvormide vahel rakenduste teisaldamise lihtsamaks, kui need on tõhusad. Hewlett-Packard integreerib POSIX-i oma litsentsitud MPE / iX OS versiooni 5.0 ja HP / UXX versioon 10.Vastavalt 0 (selle UNIX).
POSIX-standardil on palju rohkem kui kümme osa, kuid kaks neist on hõlpsasti kättesaadavad. POSIX.1 kirjeldab C programmeerimisliideseid (st.e., süsteemikõne kogu) failide, protseduuride ja sisend- / väljundterminalide jaoks. POSIX-platvormide jaoks mõeldud pakettide kogu C POSIX on C-standarditeegi raamistik. See on loodud samal ajal kui standardne ANSI C. POSIXi standardile C vastavaks muutmiseks on tehtud mitu katset. POSIX pakub standardis C rakendatutele lisavõimalusi.
POSIX semaforid
Semafoor on andmestruktuur, mida kasutatakse sageli protsesside sünkroonimiseks ja niitide abistamiseks ilma nende omavahelise suhtlemiseta. Semaforide liides on määratud POSIX-standardiga. See ei kuulu Pthreadsi hulka. Kuid enamik Pthreadsi toetavaid UNIX-e pakub isegi semafore. Unixi-laadsetes raamistikes, nagu Linux, on semaforid ühendatud protsesside vahelise side (IPC) teenuste all olevate sõnumijärjekordade ja ühismäluga. Vanemast raamistikust V semaforid ja tänapäevastest POSIX semaforitest saavad kahte tüüpi semaforid. POSIX-i semafoorkõne on palju lihtsam kui süsteemi V semafoorkõne. Kuigi System V semafoore on lihtsam hankida, eriti varasematel Unixi-laadsetel platvormidel. On vaja ühendada POSIX-i semafoore kasutavad programmid Pthreadi teegiga. Vaatame selles artiklis POSIX-i semafoore.
Miks POSIX semaforid?
Niitide ümber on suur probleem, mis on "võistlusseisund". See on olukord, kus kaks lõime püüavad saada ja muuta sama teavet, muutes selle vastuoluliseks. Võistlusolukorra vältimiseks oleme semafore kasutanud väga pikka aega.
Semafoore on saadaval kahte tüüpi:
Binaarne semafoor:
Seda tunnustatakse ka mutekslukuna. Sellel oleks ainult kaks võimalikku väärtust: 0 ja 1. Väärtus lähtestatakse väärtuseks 1. Seda kasutatakse paljude protsesside jõustamiseks, et lahendada tõsine jaotiste probleem.
Semafori lugemine:
Selle suurus võib piiramata domeenis erineda. Seda kasutatakse selleks, et tal oleks juurdepääs arvukatele eksemplaridele juurdepääsuks.
Linuxi POSIX-i raamistikul on integreeritud semafori hoidla. Selle kasutamiseks peame:
- Lisage semafor.h
- Koguge kood kokku, ühendades selle lpthread -lrt-ga.
Peaaegu kõik POSIX-i semafoorimeetodid ja -vormid on prototüüp või määratletud jaotises „Semafoor.h '. Kasutame semaforit üksuse või objekti kirjeldamiseks järgmiselt:
>> sem_t sem_name;Siin on erinevad funktsioonid, mida me kasutaksime POSIX-i semafooris.
Sem_init
Semafori initsialiseerimiseks peate kasutama meetodit sem_init. Selles funktsioonis vastab sem initsialiseeritud semafori objektile. Pshared on bänner või lipp, mis määrab, kas semaforit saab jagada hargnenud () protseduuriga või mitte. Jagatud semafoore ei toeta LinuxThreads praegu. Argumendi väärtus on algväärtus, mille juures semafoor on fikseeritud.
>> int sem_init (sem_t * sem, int pshared, allkirjastamata int väärtus);Sem_oot
Semafori hoidmiseks / lukustamiseks või ootama panemiseks kasutame sem-wait meetodit. Kui semafor on varustatud negatiivse väärtusega, blokeeritakse kõnetsükkel automaatselt. Kui mõni teine lõim kutsub sem_post, ärkab üks juba ummistunud protsessidest.
>> int sem_wait (sem_t * sem);Sem_post
Semafori väärtuse suurendamiseks kasutame meetodit sem_post. Helistamisel suurendab sem_post väärtust ja üks juba ummistunud või ootav protsess ärkab.
>> int sem_post (sem_t * sem);Sem_getvalue
Kui soovite teada semafori väärtusest, peate kasutama allpool toodud funktsiooni sem_getvalue. See saab semafori nüüdisväärtuse ja asetatakse valp-tipusesse sihtkohta.
>> Int sem_getvalue (sem_t * sem, int * valp);Sem_hävitada
Kui soovite semafori hävitada, peaksite kasutama meetodit sem_destroy. Kui semafori hääbumine peaks jätkuma, ei oota semafooris ühtegi lõime.
>> Int sem_destroy (sem_t * sem);Installige GCC utiliit
POSIX Semaphore C koodi kompileerimiseks peab teie Linuxi süsteemis olema installitud utiliit gcc. Sel eesmärgil avage käsuterminal ja proovige järgmist käsku.
$ sudo apt-get install gcc
Kinnitage oma tegevust löömisega Y.
POSIX-i semafori juurutamine C-programmeerimisega Ubuntu
Kohe alguses peate looma uue faili a-ga .cpp laiendus Ubuntu 20-s.04 süsteem. Selleks peate navigeerima oma kodukataloogi suunas ja looma uue tühja faili nimega uus.cpp. Selle saate luua ka käsuterminali puutetundliku käsu abil.
Näete, et uus.cpp-fail on loodud kodukataloogis.
Pärast .cpp-fail, avage see oma Linuxi süsteemis tekstiredaktorina ja kirjutage allolev kood sellesse faili sellisena, nagu see on. Pärast seda salvestage ja sulgege.
Käivitage programm POSIX Semaphore C Ubuntu 20-s.04
Avage oma terminal Ubuntu 20-s.04 ja käivitage allpool käsk gcc, millele järgneb failinimi.
$ gcc failinimi.c -lpthread -lrt
Moodustatud on 2 lõime, üks moodustub 2 sekundi pärast teist. Pärast poldi kättesaamist magab kõige esimene niit 4 sekundit. Niisiis, pärast selle kutsumist ei liitu teine lõime otse ja see ilmub 4-2 = 2 sekundit pärast selle kutsumist. Siin on väljund:
Kui me ei oleks semafori kasutanud, oleks kontekstivahetuse kohaselt võinud tulemus olla järgmine:
Järeldus
Selles juhendis on antud üksikasjalik ülevaade C-programmeerimisega POSIXSemaphore'i kasutamisest Ubuntu 20. Kasutades POSIX- või Pthread-teeki ainult teatud C-koodis, saab POSIX-i semafoori kodeerimisel võistlussituatsioonide vältimiseks üsna lihtsalt kasutada.