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:
- Dodajte semafor.h
- Nagomilajte kod povezivanjem s -lpthread -lrt.
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.