POSIX -semaforit C -ohjelmoinnilla

Posix Semaphores With C Programming

POSIX viittaa käyttöjärjestelmän käyttöliittymään, joka on IEEE -standardi, joka on kehitetty helpottamaan eri sovellusten siirrettävyyttä. POSIX on pyrkimys rakentaa yhteinen standardoitu versio UNIXista yhteistyössä toimittajien kanssa. Se helpottaisi sovellusten siirtämistä laitteistoalustojen välillä, jos ne ovat tehokkaita. Hewlett-Packard integroi POSIXin lisensoituun MPE/iX OS -versioon 5.0 ja HP/UXX-versioon 10.0 (sen UNIX).



POSIX -standardissa on paljon enemmän kuin kymmenen osaa, mutta kaksi on helposti saatavissa. POSIX.1 kuvaa C -ohjelmointirajapintoja (eli järjestelmäkutsukirjastoa) tiedostoille, menettelyille ja I/O -päätteille. C POSIX -pakettikirjasto POSIX -alustoille on C -standardikirjaston kehys. Tämä on määritetty samaan aikaan kuin standardi ANSI C. POSIX -standardin C mukauttamiseksi on tehty useita yrityksiä. POSIX tarjoaa lisäominaisuuksia standardin C mukaisiin toimintoihin.



POSIX Semaforit

Semafoori on tietorakenne, jota käytetään usein prosessien synkronointiin ja säikeiden avustamiseen ilman, että ne ovat vuorovaikutuksessa keskenään toimimaan yhdessä. Semaforien käyttöliittymä on määritelty POSIX -standardissa. Se ei ole osa Pthreads -ohjelmaa. Useimmat Pthreadsia tukevat UNIXit tarjoavat kuitenkin jopa semaforia. Unixin kaltaisissa kehyksissä, kuten Linuxissa, semaforit yhdistetään viestien jonoihin ja yhteiseen muistiin Interprocess Communication (IPC) -palvelujen alla. Vanhemmista viitekehyksen V -semaforista ja nykyaikaisesta POSIX -semaforista tulee kahdenlaisia ​​semaforia. POSIX Semaforipuhelu on paljon helpompaa kuin System V Semaforipuhelu. Vaikka System V -semaforit on helpompi hankkia, etenkin aiemmilla Unix-tyyppisillä alustoilla. POSIX -semaforia käyttävät ohjelmat on yhdistettävä Pthread -kirjastoon. Katsomme tässä artikkelissa POSIX -semaforia.



Miksi POSIX -semaforit?

Lankojen ympärillä on suuri ongelma, joka on rodun kunto. Se on tilanne, jossa kaksi säiettä pyrkivät saamaan ja muuttamaan samaa tietoa, mikä tekee siitä ristiriitaisen. Kilpailutilanteiden välttämiseksi olemme käyttäneet semaforia hyvin pitkään.

Semaforia on saatavana 2 erilaista:



Binaarinen semafori :

Se tunnetaan myös mutex -lukkona. Siinä olisi vain kaksi mahdollista arvoa, 0 ja 1. Arvo alustetaan muodossa 1. Sitä käytetään pakottamaan lukuisia prosesseja vakavan osion ongelman ratkaisemiseksi.

Semaforin laskeminen :

Sen koko voi vaihdella rajoittamattoman verkkotunnuksen välillä. Sitä käytetään hallitsemaan pääsyä lukuisiin instanssiresursseihin.

Linux POSIX -kehykseen on integroitu Semaphore -arkisto. Jotta voimme käyttää sitä, meidän on:

  • Lisää semaforia. H
  • Kasaa koodi yhdistämällä -lpthread -lrt.

Lähes kaikki POSIX -semaforimenetelmät ja -muodot on prototyyppinen tai määritelty kohdassa ”Semafor.h”. Käytämme Semaforia kuvaamaan kokonaisuutta tai objektia seuraavasti:

>>sem_t sem_name;

Tässä on erilaisia ​​toimintoja, joita käytämme POSIX Semaforissa.

Sem_init

Semaforin alustamiseksi sinun on käytettävä sem_init -menetelmää. Tässä toiminnossa sem vastaa alustettua semaforiobjektia. Pshared on banneri tai lippu, joka määrittää, voidaanko semaforia jakaa haarukoidun () menettelyn kanssa vai ei. LinuxThreads ei tällä hetkellä tue jaettuja semaforia. Argumentin arvo on lähtöarvo, johon semafoori on kiinnitetty.

>> intsem_init(sem_t*sem, intpshared, allekirjoittamaton intarvo);

Sem_wait

Käytämme sem-wait-menetelmää semaforin pitämiseen/lukitsemiseen tai odottamiseen. Jos semaforille on annettu negatiivinen arvo, puhelujakso estetään automaattisesti. Aina kun jokin muu säie kutsuu sem_postia, yksi jo tukkeutuneista prosesseista herää.

>> intsem_wait(sem_t*sem);

Sem_post

Käytämme sem_post -menetelmää lisätäksesi semaforin arvon. Soitettaessa sem_post lisää arvoa ja yksi jo tukkeutuneista tai odottavista prosesseista herää.

>> intsem_post(sem_t*sem);

Sem_getvalue

Jos haluat tietää semaforin arvon, sinun on käytettävä alla olevaa sem_getvalue -funktiota. Se saa semaforin nykyarvon ja sijoitetaan valppikärkiseen kohteeseen.

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

Sem_destroy

Sinun pitäisi käyttää sem_destroy -menetelmää, jos haluat tuhota semaforin. Jos semaforin kuolema jatkuu, semaforissa ei odota lankaa.

>>Int sem_destroy(sem_t*sem);

Asenna GCC -apuohjelma

POSIX Semaphore C -koodin kääntämiseksi gcc -apuohjelma on asennettava Linux -järjestelmään. Tätä varten avaa komentopääte ja kokeile alla olevaa komentoa.

$sudo apt-get install gcc

Vahvista toimintasi lyömällä JA .

POSIX Semaforin käyttöönotto C -ohjelmoinnilla Ubuntussa

Aivan alussa sinun on luotava uusi tiedosto .cpp -laajennuksella Ubuntu 20.04 -järjestelmään. Tätä varten sinun on siirryttävä kotihakemistoosi ja luotava uusi tyhjä tiedosto nimeltä new.cpp. Voit myös luoda sen komentopäätteen kosketuskomennolla.

Näet, että uusi.cpp -tiedosto on luotu kotihakemistoon.


Kun olet luonut .cpp -tiedoston, avaa se tekstieditorina Linux -järjestelmässäsi ja kirjoita alla oleva koodi tähän tiedostoon sellaisenaan. Tallenna ja sulje sen jälkeen.

Suorita POSIX Semaphore C -ohjelma Ubuntu 20.04: ssä

Avaa päätelaite Ubuntu 20.04: ssä ja suorita alla oleva gcc -komento ja tiedostonimi.

$gcctiedostonimi.c –syvyysluku –lrt

Lankoja on muodostettu 2, toinen muodostetaan 2 sekunnin kuluttua. Pultin vastaanottamisen jälkeen ensimmäinen kierre nukkuu 4 sekuntia. Joten, kun se on kutsuttu, toinen säie ei liity suoraan, ja tämä näkyy 4-2 = 2 sekuntia sen kutsumisen jälkeen. Tässä on lähtö:

Jos emme olisi käyttäneet semaforia kontekstinvaihdon mukaan, tulos olisi voinut olla seuraava:

Johtopäätös

Tässä oppaassa on annettu yksityiskohtainen katsaus POSIXSemaphoren ja C -ohjelmoinnin käyttöön Ubuntu 20: ssä. Pelkästään käyttämällä POSIX- tai Pthread -kirjastoa tietyn C -koodin läpi, POSIX -semaforia voidaan käyttää melko helposti kilpailuolosuhteiden estämiseen koodauksen aikana.