POSIX semafori s C programiranjem

Posix Semaphores With C Programming

POSIX se odnosi na prijenosno sučelje OS -a, koje je IEEE standard, razvijeno kako bi pomoglo prenosivost različitih aplikacija. POSIX je pokušaj izgradnje zajedničke standardizirane verzije UNIX -a kroz suradnju dobavljača. Olakšalo bi prijenos aplikacija među hardverske platforme ako su učinkovite. Hewlett-Packard integrira POSIX u licenciranu MPE/iX OS verziju 5.0 i HP/UXX verziju 10.0 (UNIX).

Standard POSIX ima mnogo više od deset dijelova, međutim dva su lako dostupna. POSIX.1 opisuje programska sučelja C (tj. Knjižnicu sistemskih poziva) za datoteke, procedure i I/O terminale. Knjižnica paketa C POSIX za POSIX platforme okvir je standardne knjižnice C. To je uspostavljeno u isto vrijeme kada i standard ANSI C. Kako bi POSIX bio usklađen sa standardom C, učinjeno 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 pomaganje niti bez njihove međusobne interakcije za zajedničko djelovanje. Sučelje za semafore određeno je standardom POSIX. Nije dio Pthreadsa. Međutim, većina UNIX -ova koji podržavaju Pthreads čak pružaju semafore. U okvirima nalik Unixu, poput Linuxa, semafori se spajaju s redovima poruka i zajedničkom memorijom ispod usluga međuprocesne komunikacije (IPC). Stariji okvirni V semafori i moderni POSIX semafori postaju dvije vrste semafora. POSIX Semaphore pozivi su mnogo lakši nego pozivi System V Semaphore. Iako je semafore System V lakše dobiti, osobito na ranijim platformama nalik Unixu. Postoji potreba za povezivanjem programa pomoću POSIX semafora na knjižnicu Pthread. U ovom ćemo članku pogledati semafore POSIX.



Zašto POSIX semafori?

Postoji veliki problem oko niti, a to je stanje utrke. To je okolnost u kojoj dvije niti nastoje pribaviti i izmijeniti iste informacije, što ih čini sukobljenim. Kako bismo izbjegli uvjete utrke, semafore smo koristili jako dugo.



Semafori su dostupni u 2 vrste:

Binarni semafor :

Također je prepoznat kao mutex brava. Imala 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 odjeljka.



Brojanje Semafora :

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

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

  • Dodajte semafor.h
  • Nakupite kôd povezivanjem s -lpthread -lrt.

Gotovo sve metode i oblici POSIX Semaphora prototipirani su ili specificirani u 'Semaphore.h'. Koristit ćemo Semafor za opis entiteta ili objekta kao:

>>sem_t sem_name;

Evo različitih funkcija koje bismo koristili u POSIX Semaphore -u.

Sem_init

Za inicijalizaciju semafora morate koristiti metodu sem_init. U ovoj funkciji sem odgovara inicijaliziranom objektu semafora. Pshared je banner ili zastava koja određuje može li se semafor dijeliti s postupkom forked () ili ne. LinuxThreads trenutno ne podupire zajedničke semafore. Vrijednost argumenta je početna vrijednost na koju je semafor fiksiran.

>> intsem_init(sem_t*sem, intpshared, nepotpisan intvrijednost);

Sem_čekajte

Koristit ćemo metodu sem-wait za zadržavanje/zaključavanje semafora ili njegovo čekanje. Ako je semaforu dana negativna vrijednost, tada će se ciklus poziva automatski blokirati. Kad god bilo koja druga nit pozove sem_post, budi se jedan od već začepljenih procesa.

>> intsem_čekaj(sem_t*sem);

Sem_post

Koristit ćemo metodu sem_post za povećanje vrijednosti semafora. Po pozivu, sem_post će povećati vrijednost, a jedan od već začepljenih procesa ili procesa čekanja se budi.

>> intsem_post(sem_t*sem);

Sem_getvalue

Ako želite znati o vrijednosti semafora, morate upotrijebiti donju funkciju sem_getvalue. Dobit će sadašnju vrijednost semafora i postaviti ga na odredište usmjereno na valp.

>>Int sem_getvalue(sem_t*sem, int *štene);

Sem_destroy

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

>>Int sem_destroy(sem_t*sem);

Instalirajte GCC Utility

Za sastavljanje POSIX Semaphore C koda morate imati instaliran gcc uslužni program u svom Linux sustavu. U tu svrhu otvorite svoj naredbeni terminal i isprobajte donju naredbu.

$sudo apt-get install gcc

Potvrdite svoju radnju udarcem I .

Implementacija POSIX Semaphora s C programiranjem u Ubuntu

Na samom početku morate stvoriti novu datoteku s .cpp nastavkom na sustavu Ubuntu 20.04. Da biste to učinili, morate se kretati prema svom početnom direktoriju i stvoriti novu praznu datoteku pod nazivom new.cpp. Također ga možete stvoriti pomoću naredbe touch na vašem komandnom terminalu.

Možete vidjeti da je datoteka new.cpp stvorena u kućnom direktoriju.


Nakon stvaranja .cpp datoteke, otvorite je kao uređivač teksta u svom Linux sustavu i upišite donji kod u ovu datoteku kakva je. Nakon toga spremite i zatvorite.

Izvršite program POSIX Semaphore C u Ubuntu 20.04

Otvorite svoj terminal U Ubuntu 20.04 i izvedite donju naredbu gcc iza koje slijedi naziv datoteke.

$gccnaziv datoteke.c –lpthread –lrt

Formirane su 2 niti, jedna nastaje nakon 2 sekunde druge. Nakon primanja vijka, 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 izlaza:

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

Zaključak

U ovom vodiču dat je detaljan pregled uporabe POSIXSemaphore s programiranjem C u Ubuntu 20. Samo korištenjem POSIX ili Pthread knjižnice u određenom C kodu, POSIX Semaphore može se vrlo lako koristiti za sprječavanje uvjeta utrke tijekom kodiranja.