Programare C

Semafoare POSIX cu programare C

Semafoare POSIX cu programare C

POSIX se referă la interfața portabilă a sistemului de operare, care este un standard IEEE, dezvoltat pentru a facilita portabilitatea diferitelor aplicații. POSIX este un efort de a construi o versiune standardizată comună a UNIX printr-o colaborare a furnizorilor. Ar facilita portarea aplicațiilor între platformele hardware dacă acestea sunt eficiente. Hewlett-Packard integrează POSIX în versiunea 5 OS licențiată MPE / iX.0 și HP / UXX versiunea 10.0, respectiv (UNIX-ul său).

Standardul POSIX are mult mai mult de zece părți, cu toate acestea, două sunt ușor de obținut. POSIX.1 descrie interfețele de programare C (i.e., o bibliotecă de apeluri de sistem) pentru fișiere, proceduri și terminale I / O. Biblioteca de pachete C POSIX pentru platformele POSIX este un cadru al bibliotecii standard C. Acest lucru este stabilit în același timp cu standardul ANSI C. Pentru a face POSIX compatibil cu standardul C, s-au făcut mai multe încercări. POSIX oferă caracteristici suplimentare celor implementate în standardul C.

Semafore POSIX

Un semafor este o structură de date adesea utilizată pentru sincronizarea proceselor și asistarea firelor fără interacțiunea lor între ele pentru a opera împreună. Interfața pentru semafor este specificată de standardul POSIX. Nu face parte din Pthreads. Cu toate acestea, majoritatea UNIX-urilor care acceptă Pthreads oferă chiar și semafoare. În cadrele de tip Unix, cum ar fi Linux, semaforele sunt îmbinate cu cozile de mesaje și memoria comună sub serviciile de comunicare prin proces (IPC). Semaforele cadru V mai vechi și semaforele POSIX moderne devin două tipuri de semafore. Apelarea semafor POSIX este mult mai ușoară decât apelurile semaforului System V. Deși, semaforele System V sunt mai ușor de obținut, mai ales pe platformele anterioare de tip Unix. Este nevoie să conectați programele folosind semaforele POSIX la biblioteca Pthread. Vom arunca o privire asupra semaforelor POSIX din acest articol.

De ce semaforele POSIX?

Există o mare problemă legată de fire, care este „starea cursei”. Este o circumstanță în care două fire încearcă să obțină și să modifice aceleași informații, făcându-le astfel conflictuale. Pentru a evita o condiție de rasă, folosim semaforele de foarte mult timp.

Semaforele sunt disponibile în 2 feluri:

Semafor binar:

Este, de asemenea, recunoscut ca o blocare mutex. Ar avea doar două valori posibile, 0 și 1. Valoarea va fi inițializată ca 1. Este folosit pentru a pune în aplicare numeroase procese pentru rezolvarea problemei grave a secțiunii.

Numărând semafor:

Dimensiunea sa poate varia de la un domeniu nerestricționat. Este folosit pentru a avea autoritate asupra accesului la resurse de numeroase instanțe.

Cadrul Linux POSIX are depozitul său integrat de semafor. Pentru a-l utiliza, trebuie:

Aproape toate metodele și formele de semafor POSIX sunt prototipate sau specificate în „Semafor.h '. Vom folosi semaforul pentru a descrie o entitate sau obiect ca:

>> sem_t sem_name;

Iată câteva funcții pe care le-am folosi în POSIX Semaphore.

Sem_init

Pentru a inițializa un semafor, trebuie să utilizați metoda sem_init. În această funcție, sem corespunde unui obiect semafor inițializat. Pshared este un banner sau un steag care specifică dacă semaforul poate fi partajat cu o procedură forked () sau nu. Semaforele partajate nu sunt în prezent pregătite de LinuxThreads. Valoarea argumentului este valoarea inițială la care este fixat semaforul.

>> int sem_init (sem_t * sem, int pshared, valoare int nesemnată);

Sem_așteptați

Vom folosi metoda sem-wait pentru a ține / bloca un semafor sau a-l face să aștepte. Dacă semaforul a fost furnizat cu o valoare negativă, atunci ciclul de apel va fi blocat automat. Ori de câte ori orice alt fir apelează sem_post, se trezește unul dintre procesele deja înfundate.

>> int sem_wait (sem_t * sem);

Sem_post

Vom folosi metoda sem_post pentru a crește valoarea unui semafor. La apelare, sem_post va crește valoarea și se trezește unul dintre procesele deja înfundate sau în așteptare.

>> int sem_post (sem_t * sem);

Sem_getvalue

Dacă doriți să aflați despre valoarea unui semafor, trebuie să utilizați funcția sem_getvalue de mai jos. Acesta va obține valoarea actuală a semaforului și va fi plasat în destinația cu vârf de valp.

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

Sem_distruge

Ar trebui să utilizați metoda sem_destroy dacă doriți să distrugeți semaforul. Dacă dispariția semaforului va continua, niciun fir nu va aștepta în semafor.

>> Int sem_destroy (sem_t * sem);

Instalați utilitarul GCC

Pentru a compila codul POSIX Semaphore C, trebuie să aveți instalat utilitarul gcc în sistemul dvs. Linux. În acest scop, deschideți terminalul de comandă și încercați comanda de mai jos.

$ sudo apt-get install gcc

Afirmați-vă acțiunea lovind Da.

Implementarea POSIX Semaphore cu programare C în Ubuntu

La început, trebuie să creați un fișier nou cu un fișier .extensie CPP pe Ubuntu 20.04 sistem. Pentru aceasta, trebuie să navigați către Directorul de acasă și să creați un nou fișier gol numit new.cpp. De asemenea, îl puteți crea folosind comanda tactilă din terminalul de comandă.

Puteți vedea că noul.fișierul cpp a fost creat în directorul principal.


După crearea .cpp, deschideți-l ca editor de text în sistemul dvs. Linux și scrieți codul de mai jos în acest fișier așa cum este. După aceea, salvați-l și închideți-l.

Executați programul POSIX Semaphore C în Ubuntu 20.04

Deschideți terminalul În Ubuntu 20.04 și executați comanda gcc de mai jos urmată de numele fișierului.

$ gcc nume de fișier.c -lpthread -lrt

Există 2 fire formate, unul se formează după 2 secunde unul de celălalt. După primirea șurubului, primul fir doarme timp de 4 secunde. Deci, după ce a fost apelat, al doilea fir nu s-ar alătura direct, iar acest lucru va apărea la 4-2 = 2 secunde după ce a fost apelat. Iată rezultatul:

Dacă nu am fi folosit semafor, în funcție de schimbarea contextului, rezultatul ar fi putut fi după cum se observă:

Concluzie

În acest ghid, a fost prezentată o prezentare detaliată a utilizării POSIXSemaphore cu programare C în Ubuntu 20. Prin simpla utilizare a bibliotecii POSIX sau Pthread în anumite coduri C, semaforul POSIX poate fi utilizat cu ușurință pentru a preveni condițiile de cursă în timpul codării.

WinMouse lets you customize & improve mouse pointer movement on Windows PC
If you want to improve the default functions of your mouse pointer use freeware WinMouse. It adds more features to help you get the most out of your h...
Mouse left-click button not working on Windows 10
If you are using a dedicated mouse with your laptop, or desktop computer but the mouse left-click button is not working on Windows 10/8/7 for some rea...
Cursor jumps or moves randomly while typing in Windows 10
If you find that your mouse cursor jumps or moves on its own, automatically, randomly while typing in Windows laptop or computer, then some of these s...