C Programiranje

POSIX semafori s C programiranjem

POSIX semafori s C programiranjem

POSIX se odnosi na prijenosno sučelje OS-a, što je IEEE standard, razvijeno da pomogne prenosivosti različitih aplikacija. POSIX je pokušaj izgradnje zajedničke standardizirane verzije UNIX-a kroz suradnju dobavljača. To bi olakšalo prijenos aplikacija s hardverskih platformi ako su učinkovite. Hewlett-Packard integrira POSIX u svoj licencirani MPE / iX OS verzije 5.0 i HP / UXX verzija 10.0, odnosno (njegov UNIX).

POSIX standard ima mnogo više od deset dijelova, međutim, dva se lako mogu dobiti. POSIX.1 opisuje programska sučelja C (tj.e., biblioteka sistemskih poziva) za datoteke, postupke i I / O terminale. Biblioteka paketa C POSIX za POSIX platforme okvir je C standardne knjižnice. To se uspostavlja istodobno sa standardnim ANSI C. Da bi POSIX bio usklađen sa standardom C, poduzet je nekoliko pokušaja. POSIX pruža dodatne značajke onima implementiranim u standardu C.

POSIX semafori

Semafor je struktura podataka koja se često koristi za sinkronizaciju procesa i pomoć nitima bez međusobne interakcije radi zajedničkog rada. Sučelje za semafore određeno je POSIX standardom. Nije dio Pthreads-a. Međutim, većina UNIX-ova koji podržavaju Pthreads čak nude i semafore. U Unix-sličnim okvirima, poput Linuxa, semafori se spajaju s redovima poruka i zajedničkom memorijom ispod usluga Interprocess Communication (IPC). Stariji okvirni V semafori i moderni POSIX semafori postaju dvije vrste semafora. POSIX Semaphore pozivanje je puno lakše od System V Semaphore poziva. Iako je System V semafore lakše dobiti, pogotovo na ranijim platformama sličnim Unixu. Potrebno je povezati programe pomoću POSIX semafora s knjižnicom Pthread. U ovom ćemo članku pogledati POSIX semafore.

Zašto POSIX semafori?

Postoji veliki problem oko niti, a to je "stanje rase". To je okolnost u kojoj dvije niti nastoje dobiti i izmijeniti iste informacije, čineći ih tako proturječnima. Da bismo izbjegli uvjete utrke, semaforima se služimo već jako dugo.

Semafori su dostupni u dvije vrste:

Binarni semafor:

Također je prepoznat kao muteks brava. Imao bi samo dvije moguće vrijednosti, 0 i 1. Vrijednost će biti inicijalizirana kao 1. Koristi se za provođenje brojnih procesa za rješavanje ozbiljnog problema s odjeljkom.

Brojeći Semafor:

Njegova veličina može varirati na neograničenoj domeni. Koristi se za ovlaštenje za pristup resursima brojnih instanci.

Linux POSIX okvir ima integrirano spremište Semaphore. Da bismo ga koristili, moramo:

Gotovo sve metode i obrasci POSIX Semaphore prototipizirani su ili specificirani u 'Semaphoreu.h '. Koristit ćemo Semafor da bismo entitet ili objekt opisali kao:

>> sem_t sem_name;

Evo različitih funkcija koje bismo koristili u POSIX Semaphoreu.

Sem_init

Da biste inicijalizirali semafor, morate koristiti metodu sem_init. U ovoj funkciji sem odgovara inicijaliziranom objektu semafora. Pshared je natpis ili zastava koji određuje može li se semafor dijeliti s forked () postupkom ili ne. LinuxThreads trenutno ne rade s dijeljenim semaforima. Vrijednost argumenta je početna vrijednost na kojoj je semafor fiksiran.

>> int sem_init (sem_t * sem, int pshared, nepotpisana int vrijednost);

Sem_čekaj

Koristit ćemo metodu sem-wait da zadržimo / zaključamo semafor ili ga natjeramo da pričeka. Ako je semafor dobio negativnu vrijednost, tada će se ciklus poziva automatski blokirati. Kad god bilo koja druga nit pozove sem_post, probudi se jedan od već začepljenih procesa.

>> int sem_cait (sem_t * sem);

Sem_post

Upotrijebit ćemo metodu sem_post za povećanje vrijednosti semafora. Nakon poziva sem_post će povećati vrijednost i probudit će se jedan od već začepljenih ili čekajućih procesa.

>> int sem_post (sem_t * sem);

Sem_getvalue

Ako želite znati o vrijednosti semafora, morate koristiti donju funkciju sem_getvalue. Dobit će sadašnju vrijednost semafora i biti postavljen na odredište istaknuto valpom.

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

Sem_destroy

Trebali biste koristiti metodu sem_destroy ako želite uništiti semafor. Ako se nastavak propadanja semafora nastavlja, u semaforu neće čekati niti.

>> Int sem_destroy (sem_t * sem);

Instalirajte uslužni program GCC

Da biste kompilirali POSIX Semaphore C kôd, morate imati uslužni program gcc instaliran u vašem Linux sustavu. U tu svrhu otvorite naredbeni terminal i isprobajte naredbu u nastavku.

$ sudo apt-get install gcc

Potvrdite svoju akciju udaranjem Y.

Implementacija POSIX Semaphore s C programiranjem u Ubuntuu

Na samom početku morate stvoriti novu datoteku s .cpp proširenje na Ubuntu 20.04 sustav. Da biste to učinili, morate se pomaknuti prema početnom direktoriju i stvoriti novu praznu datoteku pod nazivom nova.cpp. Možete ga stvoriti i pomoću naredbe touch u vašem naredbenom terminalu.

Vidite da je novo.cpp datoteka stvorena je u početnom direktoriju.


Nakon stvaranja .cpp datoteku, otvorite je kao program za uređivanje teksta u vašem Linux sustavu i napišite donji kod u ovu datoteku kakav jest. Nakon toga ga spremite i zatvorite.

Izvršite POSIX program Semaphore C u Ubuntu 20.04

Otvorite terminal u Ubuntu 20.04 i izvršite donju naredbu gcc nakon koje slijedi naziv datoteke.

$ gcc naziv datoteke.c -lpthread -lrt

Formirane su 2 niti, jedna se stvara nakon 2 sekunde druge. Nakon primanja zasuna, prvi navoj spava 4 sekunde. Dakle, nakon što je pozvana, druga nit se neće izravno pridružiti, a to će se pojaviti 4-2 = 2 sekunde nakon što je pozvana. Evo rezultata:

Da nismo koristili semafor, prema prebacivanju konteksta, rezultat bi mogao biti sljedeći:

Zaključak

U ovom je priručniku dat detaljan pregled upotrebe POSIXSemaphorea s C programiranjem u Ubuntu 20. Pukom upotrebom biblioteke POSIX ili Pthread kroz određeni C kod, POSIX Semaphore može se prilično lako koristiti za sprečavanje uvjeta utrke tijekom kodiranja.

Top 5 ergonomskih proizvoda za računalni miš za Linux
Uzrokuje li dugotrajno korištenje računala bolove u zapešću ili prstima? Patite li od ukočenih zglobova i stalno se morate rukovati? Osjećate li goruć...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Zamijenite svoje tipke miša različito za različiti softver pomoću X-Mouse Button Control
Možda vam treba alat koji bi mogao promijeniti kontrolu miša sa svakom aplikacijom koju koristite. Ako je to slučaj, možete isprobati aplikaciju pod n...