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.