Semàfors POSIX amb programació C.

Posix Semaphores With C Programming



POSIX fa referència a la interfície portàtil del sistema operatiu, que és un estàndard IEEE, desenvolupat per facilitar la portabilitat de diferents aplicacions. POSIX és un esforç per crear una versió normalitzada comuna d’UNIX mitjançant una col·laboració de proveïdors. Facilitaria la portabilitat d'aplicacions entre plataformes de maquinari si són efectives. Hewlett-Packard està integrant POSIX en el seu sistema operatiu amb llicència MPE / iX versió 5.0 i HP / UXX versió 10.0, respectivament (el seu UNIX).

L’estàndard POSIX té molt més de deu parts, tot i que se’n poden obtenir dos fàcilment. POSIX.1 descriu interfícies de programació C (és a dir, una biblioteca de trucades del sistema) per a fitxers, procediments i terminals d'E / S. La biblioteca de paquets C POSIX per a plataformes POSIX és un marc de la biblioteca estàndard C. Això s’estableix al mateix temps que l’estàndard ANSI C. Per fer que POSIX sigui compatible amb l’estàndard C, s’han fet diversos intents. POSIX proporciona funcions addicionals a les implementades a l’estàndard C.







Semàfors POSIX

Un semàfor és una estructura de dades sovint utilitzada per sincronitzar els processos i ajudar els fils sense que la seva interacció entre ells funcioni junts. La interfície per a semàfors està especificada per l'estàndard POSIX. No forma part de Pthreads. Tanmateix, la majoria d'UNIX que admeten Pthreads fins i tot proporcionen semàfors. En marcs semblants a Unix, com Linux, els semàfors es combinen amb cues de missatges i memòria comuna sota els serveis de comunicació de processos (IPC). Els semàfors marc V més antics i els semàfors POSIX moderns es converteixen en dos tipus de semàfors. Les trucades de semàfor POSIX són molt més fàcils que les trucades de semàfor del sistema V. Tot i que els semàfors del sistema V són més fàcils d’obtenir, especialment en plataformes similars a Unix anteriors. Cal connectar programes mitjançant semàfors POSIX a la biblioteca Pthread. En aquest article veurem els semàfors POSIX.



Per què els semàfors POSIX?

Hi ha un gran problema al voltant dels fils, que és l’estat de la carrera. És una circumstància en què dos fils intenten obtenir i alterar la mateixa informació, fent-la conflictiva. Per evitar una condició de carrera, portem molt de temps utilitzant semàfors.



Els semàfors estan disponibles en dos tipus:





Semàfor binari :

També es reconeix com a pany mutex. Només tindria dos valors possibles, 0 i 1. El valor s’inicialitzarà com a 1. S’utilitza per fer complir nombrosos processos per resoldre el greu problema de la secció.



Comptant semàfor :

La seva mida pot variar entre un domini sense restriccions. S’utilitza per tenir autoritat sobre l’accés a recursos de nombroses instàncies.

El framework POSIX de Linux té el seu dipòsit de semafor integrat. Per utilitzar-lo, hem de:

  • Afegiu semàfor.h
  • Pileu el codi connectant-vos amb -lpthread -lrt.

Gairebé tots els mètodes i formes de semàfor POSIX estan prototipats o especificats a 'Semaphore.h'. Utilitzarem el semàfor per descriure una entitat o objecte com:

>>sem_t sem_name;

Aquí hi ha diferents funcions que faríem servir al semàfor POSIX.

Sem_init

Per inicialitzar un semàfor, heu d’utilitzar el mètode sem_init. En aquesta funció, sem correspon a un objecte semàfor inicialitzat. Pshared és una bandera o un indicador que especifica si el semàfor es pot compartir amb un procediment forked () o no. Els semàfors compartits actualment no estan preparats per LinuxThreads. El valor de l’argument és el valor inicial al qual es fixa el semàfor.

>> intsem_init(sem_t*sem, intpshared, sense signar intvalor);

Sem_esperar

Utilitzarem el mètode sem-wait per mantenir / bloquejar un semàfor o fer-lo esperar. Si el semàfor s'ha proporcionat amb un valor negatiu, el cicle de trucades es bloquejarà automàticament. Sempre que qualsevol altre fil crida sem_post, es desperta un dels processos ja obstruïts.

>> intsem_esperar(sem_t*sem);

Sem_post

Utilitzarem el mètode sem_post per augmentar el valor d’un semàfor. En trucar, sem_post augmentarà el valor i es despertarà un dels processos ja obstruïts o en espera.

>> intsem_post(sem_t*sem);

Sem_getvalue

Si voleu conèixer el valor d’un semàfor, heu d’utilitzar la funció sem_getvalue següent. Obtindrà el valor actual del semàfor i es col·locarà a la destinació amb punt valp.

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

Sem_destrueix

Haureu d’utilitzar el mètode sem_destroy si voleu destruir el semàfor. Si s'ha de procedir a la desaparició del semàfor, no hi haurà cap fil en espera al semàfor.

>>Int sem_destroy(sem_t*sem);

Instal·leu la utilitat GCC

Per compilar el codi POSIX Semaphore C, heu de tenir instal·lada la utilitat gcc al vostre sistema Linux. Amb aquest propòsit, obriu el terminal d'ordres i proveu l'ordre següent.

$suo apt-get install gcc

Premeu per afirmar la vostra acció I .

Implementació de POSIX Semaphore amb programació C a Ubuntu

Al principi, heu de crear un fitxer nou amb una extensió .cpp al sistema Ubuntu 20.04. Per a això, heu de navegar cap al vostre directori inicial i crear un fitxer buit nou anomenat new.cpp. També podeu crear-lo mitjançant l'ordre tàctil del terminal d'ordres.

Podeu veure que el fitxer new.cpp s’ha creat al directori inicial.


Després de la creació del fitxer .cpp, obriu-lo com a editor de text al vostre sistema Linux i escriviu el codi següent en aquest fitxer tal com està. Després, deseu-lo i tanqueu-lo.

Executeu el programa POSIX Semaphore C a Ubuntu 20.04

Obriu el terminal a Ubuntu 20.04 i executeu l'ordre següent gcc seguida del nom del fitxer.

$gccnom del fitxer.c –lpthread –lrt

Hi ha 2 fils formats, un es forma al cap de 2 segons de l'altre. Després de rebre el pern, el primer fil dorm durant 4 segons. Per tant, després de cridar-lo, el segon fil no s’uniria directament i apareixerà 4-2 = 2 segons després de ser cridat. Aquí teniu la sortida:

Si no haguéssim utilitzat semàfor, segons el canvi de context, el resultat podria haver estat el que s’observa:

Conclusió

En aquesta guia, s’ofereix una visió general detallada de l’ús de POSIXSemaphore amb programació C a Ubuntu 20. Simplement utilitzant la biblioteca POSIX o Pthread a través de determinats codis C, el semàfor POSIX es pot utilitzar fàcilment per evitar les condicions de cursa durant la codificació.