C Ohjelmointi

POSIX-semaforit C-ohjelmoinnilla

POSIX-semaforit C-ohjelmoinnilla

POSIX viittaa käyttöjärjestelmän kannettavaan käyttöliittymään, joka on IEEE-standardi, joka on kehitetty auttamaan eri sovellusten siirrettävyyttä. POSIX on yritys rakentaa yhteinen standardoitu versio UNIXista toimittajien yhteistyön avulla. Se tekisi sovellusten siirtämisen laitteistoalustojen välillä helpommaksi, jos ne ovat tehokkaita. Hewlett-Packard integroi POSIXin lisensoituun MPE / iX OS -versioon 5.0 ja HP ​​/ UXX-versio 10.0, vastaavasti (sen UNIX).

POSIX-standardissa on paljon yli kymmenen osaa, mutta kaksi on kuitenkin helposti saatavissa. POSIX.Kuvassa 1 kuvataan C-ohjelmointirajapinnat (eli.e., järjestelmäkutsukirjasto) tiedostoille, menettelyille ja I / O-päätelaitteille. C POSIX -pakettikirjasto POSIX-alustoille on kehys C-standardikirjastoon. Tämä on muodostettu samaan aikaan kuin standardi ANSI C. Jotta POSIX olisi yhteensopiva standardin C kanssa, on tehty useita yrityksiä. POSIX tarjoaa lisäominaisuuksia niille, jotka on toteutettu standardi C: ssä.

POSIX-semaforit

Semafori on tietorakenne, jota käytetään usein prosessien synkronointiin ja ketjujen auttamiseen ilman niiden vuorovaikutusta toistensa kanssa toimiakseen yhdessä. Semaforien rajapinta on määritelty POSIX-standardissa. Se ei ole osa Pthreadsia. Useimmat Pthreadsia tukevat UNIX-tiedostot tarjoavat kuitenkin jopa semaforeja. Unixin kaltaisissa kehyksissä, kuten Linux, semaforit yhdistetään viestijonoihin ja yhteiseen muistiin IPC (Interprocess Communication) -palvelujen alla. Vanhemmista V-kehyssemaforeista ja moderneista POSIX-semaforeista tulee kahdenlaisia ​​semaforeja. POSIX-semaforipuhelut ovat niin paljon helpompia kuin System V -semaforipuhelut. Vaikka System V -semaforeja on helpompi saada, varsinkin aikaisemmilla Unix-tyyppisillä alustoilla. Pthread-kirjastoon on liitettävä POSIX-semaforeja käyttävät ohjelmat. Katsotaanpa tässä artikkelissa olevia POSIX-semaforeja.

Miksi POSIX-semaforit?

Lankojen ympärillä on iso ongelma, joka on “rodun kunto”. Kyseessä on tilanne, jossa kaksi säiettä pyrkii saamaan ja muuttamaan samaa tietoa, mikä tekee siitä ristiriitaisen. Kilpailutilanteen välttämiseksi olemme käyttäneet semaforeja jo kauan.

Semaforeja on saatavana 2 erilaista:

Binaarinen semafori:

Se tunnistetaan myös mykistyslukoksi. Sillä olisi vain kaksi mahdollista arvoa, 0 ja 1. Arvoksi alustetaan 1. Sitä käytetään lukemattomien prosessien täytäntöönpanoon vakavan osion ongelman ratkaisemiseksi.

Lasketaan semaforia:

Sen koko voi vaihdella rajoittamattomalla verkkotunnuksella. Sitä käytetään hallitsemaan pääsy lukuisiin instanssiresursseihin.

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

Lähes kaikki POSIX-semaforimenetelmät ja -muodot on prototyyppi tai määritelty kohdassa 'Semafori.h '. Käytämme semaforia kuvaamaan kokonaisuutta tai objektia seuraavasti:

>> sem_t sem_name;

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

Sem_init

Semaforin alustamiseksi sinun on käytettävä sem_init-menetelmää. Tässä funktiossa sem vastaa alustettua semaforiobjektia. Pshared on lippu tai lippu, joka määrittää, voidaanko semafori jakaa haarautuneella () -prosessilla vai ei. LinuxThreads ei tällä hetkellä tue jaettuja semaforeja. Argumentin arvo on lähtöarvo, johon semafori on kiinnitetty.

>> int sem_init (sem_t * sem, int pshared, allekirjoittamaton int-arvo);

Odota

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

>> int sem_wait (sem_t * sem);

Sem_post

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

>> int sem_post (sem_t * sem);

Sem_getvalue

Jos haluat tietää semaforin arvosta, sinun on käytettävä alla olevaa sem_getvalue-funktiota. Se saa semaforin nykyarvon ja sijoitetaan valp-terävään kohteeseen.

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

Sem_destroy

Sinun tulisi käyttää sem_destroy-menetelmää, jos haluat tuhota semaforin. Jos semaforin kuoleman on tarkoitus jatkua, semaforassa ei ole mitään säiettä.

>> Int sem_destroy (sem_t * sem);

Asenna GCC-apuohjelma

POSIX Semaphore C -koodin kääntämiseksi sinulla on oltava gcc-apuohjelma asennettuna Linux-järjestelmääsi. Avaa tätä varten komentoterminaali ja kokeile alla olevaa komentoa.

$ sudo apt-get install gcc

Vahvista toiminta lyömällä Y.

POSIX-semaforin toteutus C-ohjelmoinnilla Ubuntussa

Alussa sinun on luotava uusi tiedosto a: lla .cpp-laajennus Ubuntu 20: ssä.04-järjestelmä. Tätä varten sinun on navigoitava kohti kotihakemistoa ja luotava uusi tyhjä tiedosto nimeltä uusi.cpp. Voit luoda sen myös komentoterminaalin kosketuskomennolla.

Voit nähdä, että uusi.cpp-tiedosto on luotu kotihakemistoon.


Luomisen jälkeen .cpp-tiedosto, avaa se tekstieditorina Linux-järjestelmässäsi ja kirjoita alla oleva koodi tähän tiedostoon sellaisenaan. Sen jälkeen tallenna ja sulje se.

Suorita POSIX Semaphore C -ohjelma Ubuntu 20: ssa.04

Avaa päätelaite Ubuntu 20: ssa.04 ja suorita alla oleva gcc-komento, jota seuraa tiedostonimi.

$ gcc-tiedostonimi.c -lpthread -lrt

Muodostuneita lankoja on 2, toinen muodostuu kahden sekunnin kuluttua toisesta. Saatuaan pultin ensimmäinen lanka nukkuu 4 sekuntia. Joten, kun se on kutsuttu, toinen ketju ei liity suoraan, ja tämä näkyy 4-2 = 2 sekuntia sen kutsumisen jälkeen. Tässä on tulos:

Jos emme olisi käyttäneet semaforia kontekstivaihdon mukaan, tulos olisi voinut olla kuten havaitaan:

Johtopäätös

Tässä oppaassa on annettu yksityiskohtainen kuvaus POSIXSemaphoren käytöstä C-ohjelmoinnilla Ubuntu 20: ssa. Pelkästään käyttämällä POSIX- tai Pthread-kirjastoa tietyssä C-koodissa, POSIX-semaforia voidaan melko helposti käyttää kilpailuehtojen estämiseen koodauksen aikana.

Ilmaiset ja avoimen lähdekoodin pelimoottorit Linux-pelien kehittämiseen
Tämä artikkeli kattaa luettelon ilmaisista ja avoimen lähdekoodin pelimoottoreista, joita voidaan käyttää 2D- ja 3D-pelien kehittämiseen Linuxissa. Tä...
Shadow of the Tomb Raider for Linux -opetusohjelma
Shadow of the Tomb Raider on kahdestoista lisäys Tomb Raider -sarjaan - toiminta-seikkailupelisarja, jonka on luonut Eidos Montreal. Kriitikot ja fani...
Kuinka parantaa FPS ää Linuxissa?
FPS tarkoittaa Kuvaa sekunnissa. FPS: n tehtävänä on mitata kehysnopeus videotoistoissa tai peliesityksissä. Yksinkertaisin sanoin sekunnissa näytettä...