C Programmeerimine

C-programmeerimisega POSIX-i semaforid

C-programmeerimisega POSIX-i semaforid

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:

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.

X-Mouse Button Control abil saate hiire nupud erinevates tarkvarades erinevalt ümber teha
Võib-olla vajate tööriista, mis võiks muuta teie hiire juhtimissüsteemi iga kasutatava rakendusega. Sel juhul võite proovida rakendust nimega X hiiren...
Microsoft Sculpt Touch juhtmeta hiirte ülevaade
Lugesin hiljuti Microsoft Sculpt Touch juhtmevaba hiir ja otsustas selle osta. Pärast mõnda aega kasutamist otsustasin jagada sellega oma kogemusi. Se...
Rakenduse AppyMouse ekraanipaneel ja hiirekursor Windowsi tahvelarvutitele
Tahvelarvutite kasutajad tunnevad hiirekursorit sageli puudust, eriti kui neil on kombeks sülearvuteid kasutada. Puutetundliku ekraaniga nutitelefonid...