POSIX semaforji s programiranjem C.

Posix Semaphores With C Programming



POSIX se nanaša na prenosni vmesnik operacijskega sistema, ki je standard IEEE, razvit za pomoč pri prenosljivosti različnih aplikacij. POSIX je prizadevanje za izgradnjo skupne standardizirane različice UNIX -a s sodelovanjem prodajalcev. Prenos aplikacij med strojne platforme bi olajšal, če bi bile učinkovite. Hewlett-Packard integrira POSIX v licencirano različico OS MPE/iX 5.0 in HP/UXX različico 10.0 (njen UNIX).

Standard POSIX ima veliko več kot deset delov, vendar sta dva zlahka dostopna. POSIX.1 opisuje programske vmesnike C (tj. Knjižnico sistemskih klicev) za datoteke, postopke in V/I terminale. Knjižnica paketov C POSIX za platforme POSIX je ogrodje standardne knjižnice C. To je bilo ugotovljeno hkrati s standardnim ANSI C. Za uskladitev sistema POSIX s standardom C je bilo narejenih več poskusov. POSIX ponuja dodatne funkcije tistim, ki so implementirane v standardu C.







POSIX semaforji

Semafor je podatkovna struktura, ki se pogosto uporablja za sinhronizacijo procesov in pomoč niti, ne da bi medsebojno delovali. Vmesnik za semaforje določa standard POSIX. Ni del Pthreads. Vendar večina UNIX -jev, ki podpirajo Pthreads, celo nudi semaforje. V okvirjih, podobnih Unixu, kot je Linux, so semaforji združeni s čakalnimi vrstami sporočil in skupnim pomnilnikom pod storitvami medprocesne komunikacije (IPC). Starejši ogrodni semaforji V in sodobni semaforji POSIX postanejo dve vrsti semaforjev. Klicanje POSIX Semaphore je veliko lažje kot klici System V Semaphore. Čeprav je semaforje System V lažje dobiti, zlasti na prejšnjih platformah, podobnih Unixu. Potrebno je povezati programe, ki uporabljajo semaforje POSIX, v knjižnico Pthread. V tem članku si bomo ogledali semaforje POSIX.



Zakaj POSIX semaforji?

Okoli niti je velika težava, to je pogoj dirke. To je okoliščina, v kateri dve niti poskušata pridobiti in spremeniti iste informacije, zaradi česar so ti v nasprotju. Da bi se izognili pogojem dirke, semaforje uporabljamo že zelo dolgo.



Semaforji so na voljo v 2 vrstah:





Binarni semafor :

Prepoznana je tudi kot mutex ključavnica. Imela bi le dve možni vrednosti, 0 in 1. Vrednost bo inicializirana kot 1. Uporablja se za uveljavljanje številnih procesov za reševanje resne težave z oddelki.



Štetje Semaforja :

Njegova velikost se lahko razlikuje za neomejeno domeno. Uporablja se za pooblastilo za dostop do virov številnih primerkov.

Okvir Linux POSIX ima vgrajeno skladišče Semaphore. Za njegovo uporabo moramo:

  • Dodajte semaphore.h
  • Kodo kopičite tako, da se povežete z -lpthread -lrt.

Skoraj vse metode in oblike POSIX Semaphore so prototipizirane ali navedene v „Semaphore.h“. Semafor bomo uporabili za opis entitete ali predmeta kot:

>>sem_t sem_ime;

Tu so različne funkcije, ki bi jih uporabljali v POSIX Semaphore.

Sem_init

Za inicializacijo semaforja morate uporabiti metodo sem_init. V tej funkciji sem ustreza inicializiranemu objektu semaforja. Pshared je pasica ali zastava, ki določa, ali je mogoče semafor deliti s postopkom forked () ali ne. LinuxThreads trenutno ne podpirajo semaforjev v skupni rabi. Vrednost argumenta je začetna vrednost, na katero je fiksiran semafor.

>> intsem_init(sem_t*sem, intpshared, brez podpisa intvrednost);

Sem_čakaj

Za zadržanje/zaklepanje semaforja ali njegovo čakanje bomo uporabili metodo sem-wait. Če ima semafor negativno vrednost, se klicni cikel samodejno blokira. Kadar koli druga nit pokliče sem_post, se prebudi eden od že zamašenih procesov.

>> intsem_počakaj(sem_t*sem);

Sem_post

Za povečanje vrednosti semaforja bomo uporabili metodo sem_post. Ob klicu bo sem_post povečal vrednost in eden od že zamašenih ali čakajočih procesov se prebudi.

>> intsem_post(sem_t*sem);

Sem_getvalue

Če želite izvedeti o vrednosti semaforja, morate uporabiti spodnjo funkcijo sem_getvalue. Dobil bo sedanjo vrednost semaforja in ga postavil na cilj, usmerjen v valp.

>>Int sem_getvalue(sem_t*sem, int *kuža);

Sem_destroy

Če želite uničiti semafor, morate uporabiti metodo sem_destroy. Če naj bi semafor nadaljeval, semafor ne čaka.

>>Int sem_destroy(sem_t*sem);

Namestite pripomoček GCC

Če želite sestaviti kodo POSIX Semaphore C, morate imeti v sistemu Linux nameščen pripomoček gcc. V ta namen odprite ukazni terminal in poskusite spodnji ukaz.

$sudo apt-get install gcc

S pritiskom potrdite svoje dejanje IN .

Izvedba POSIX Semaphore s programiranjem C v Ubuntuju

Na samem začetku morate ustvariti novo datoteko s pripono .cpp v sistemu Ubuntu 20.04. Za to se morate pomakniti proti domačemu imeniku in ustvariti novo prazno datoteko z imenom new.cpp. Ustvarite ga lahko tudi z ukazom na dotik v ukaznem terminalu.

Vidite lahko, da je datoteka new.cpp ustvarjena v domačem imeniku.


Ko ustvarite datoteko .cpp, jo odprite kot urejevalnik besedil v sistemu Linux in vnesite spodaj navedeno kodo v to datoteko, kakršna je. Po tem shranite in zaprite.

Izvedite program POSIX Semaphore C v Ubuntu 20.04

Odprite svoj terminal V Ubuntu 20.04 in izvedite spodnji ukaz gcc, ki mu sledi ime datoteke.

$gccime datoteke.c –lpthread –lrt

Oblikovani sta 2 niti, ena se oblikuje po 2 sekundah druge. Po prejetju vijaka prvi navoj spi 4 sekunde. Torej, potem ko je bil poklican, se druga nit ne bi neposredno pridružila, in to se bo prikazalo 4-2 = 2 sekundi po klicu. Tukaj je rezultat:

Če ne bi uporabili semaforja, bi glede na preklapljanje konteksta lahko bil rezultat tak, kot je opažen:

Zaključek

V tem priročniku je podan podroben pregled uporabe POSIXSemaphore s programiranjem C v Ubuntu 20. Z uporabo knjižnice POSIX ali Pthread v določeni kodi C lahko semafor POSIX precej enostavno uporabite za preprečevanje dirkalnih razmer med kodiranjem.