C Programmazione

Semafori POSIX con programmazione in C

Semafori POSIX con programmazione in C

POSIX si riferisce all'interfaccia portatile del sistema operativo, che è uno standard IEEE, sviluppato per favorire la portabilità di diverse applicazioni. POSIX è uno sforzo per costruire una versione standardizzata comune di UNIX attraverso una collaborazione di fornitori. Se fossero efficaci, renderebbe più facile il porting di app tra piattaforme hardware. Hewlett-Packard sta integrando POSIX nel suo sistema operativo MPE/iX con licenza 5d.0 e HP/UXX versione 10.0, rispettivamente (il suo UNIX).

Lo standard POSIX ha molto più di dieci parti, tuttavia, due sono facilmente ottenibili. POSIX.1 descrive le interfacce di programmazione C (i.e., una libreria di chiamate di sistema) per file, procedure e terminali di I/O. La libreria di pacchetti C POSIX per piattaforme POSIX è un framework della libreria C standard. Questo viene stabilito contemporaneamente allo standard ANSI C. Per rendere POSIX conforme allo standard C, sono stati fatti diversi tentativi. POSIX fornisce funzionalità aggiuntive a quelle implementate nello standard C.

Semafori POSIX

Un semaforo è una struttura dati spesso utilizzata per sincronizzare i processi e assistere i thread senza la loro interazione tra loro per operare insieme. L'interfaccia per i semafori è specificata dallo standard POSIX. Non fa parte di Pthreads. Tuttavia, la maggior parte degli UNIX che supportano i Pthread forniscono anche i semafori. Nei framework Unix-like, come Linux, i semafori vengono uniti alle code di messaggi e alla memoria comune sotto i servizi di Interprocess Communication (IPC). I vecchi semafori framework V e i moderni semafori POSIX diventano due tipi di semafori. La chiamata POSIX Semaphore è molto più semplice delle chiamate System V Semaphore. Tuttavia, i semafori System V sono più facili da ottenere, specialmente sulle precedenti piattaforme simili a Unix. È necessario connettere i programmi che utilizzano i semafori POSIX alla libreria Pthread. Daremo un'occhiata ai semafori POSIX in questo articolo.

Perché i semafori POSIX??

C'è un grosso problema intorno ai thread, che è "race condition". È una circostanza in cui due thread cercano di ottenere e alterare la stessa informazione, rendendola così conflittuale. Per evitare una race condition, usiamo i semafori da molto tempo.

I semafori sono disponibili in 2 tipi:

Semaforo binario:

È anche riconosciuto come blocco mutex. Avrebbe solo due valori possibili, 0 e 1. Il valore verrà inizializzato come 1. Viene utilizzato per applicare numerosi processi per risolvere il problema della sezione grave.

Semaforo di conteggio:

La sua dimensione può variare in un dominio senza restrizioni. Viene utilizzato per avere autorità sull'accesso a risorse di numerose istanze.

Il framework Linux POSIX ha il suo repository Semaphore integrato. Per usarlo, dobbiamo:

Quasi tutti i metodi e i moduli POSIX Semaphore sono prototipati o specificati in "Semaphore".h'. Useremo il Semaforo per descrivere un'entità o un oggetto come:

>> sem_t sem_name;

Ecco diverse funzioni che utilizzeremmo in POSIX Semaphore.

Sem_init

Per inizializzare un semaforo, devi usare il metodo sem_init. In questa funzione, sem corrisponde a un oggetto semaforo inizializzato. Pshared è un banner o flag che specifica se il semaforo può essere condiviso con una procedura forked() o meno. I semafori condivisi non sono attualmente rinforzati da LinuxThreads. Il valore dell'argomento è il valore iniziale su cui è fissato il semaforo.

>> int sem_init(sem_t *sem, int pshared, unsigned int value);

Sem_wait

Useremo il metodo sem-wait per tenere/bloccare un semaforo o farlo aspettare. Se al semaforo è stato fornito un valore negativo, il ciclo di chiamata verrà automaticamente bloccato. Ogni volta che un altro thread chiama sem_post, uno dei processi già intasati si sveglia.

>> int sem_wait(sem_t *sem);

Sem_post

Useremo il metodo sem_post per aumentare il valore di un semaforo. Al momento della chiamata, sem_post incrementerà il valore e uno dei processi già intasati o in attesa si riattiverà.

>> int sem_post(sem_t *sem);

Sem_getvalue

Se vuoi conoscere il valore di un semaforo, devi utilizzare la seguente funzione sem_getvalue . Otterrà il valore attuale del semaforo e sarà posizionato nella destinazione a punta di valp.

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

Sem_destroy

Dovresti usare il metodo sem_destroy se vuoi distruggere il semaforo. Se la fine del semaforo deve procedere, nessun thread sarà in attesa nel semaforo.

>> Int sem_destroy(sem_t *sem);

Installa l'utility GCC

Per compilare il codice POSIX Semaphore C, devi avere l'utility gcc installata nel tuo sistema Linux. A questo scopo, apri il tuo terminale di comando e prova il comando seguente.

$ sudo apt-get install gcc

Conferma la tua azione colpendo .

Implementazione di POSIX Semaphore con programmazione C in Ubuntu

All'inizio, devi creare un nuovo file con a .cpp su Ubuntu 20.04 sistema. Per questo, devi navigare verso la tua Home Directory e creare un nuovo file vuoto chiamato nuovo.cpp. Puoi anche crearlo usando il comando touch nel tuo terminale di comando.

Puoi vedere che il nuovo.cpp è stato creato nella directory principale.


Dopo la creazione del .cpp, aprilo come editor di testo nel tuo sistema Linux e scrivi il codice seguente in questo file così com'è. Dopodiché, salvalo e chiudilo.

Esegui il programma POSIX Semaphore C in Ubuntu 20.04

Apri il tuo terminale In Ubuntu 20.04 ed esegui il comando gcc sottostante seguito dal nome del file.

$ nome file gcc.c -lpthread -lrt

Ci sono 2 fili formati, uno si forma dopo 2 secondi dall'altro. Dopo aver ricevuto il bullone, il primissimo thread dorme per 4 secondi. Quindi, dopo che è stato chiamato, il secondo thread non si unirebbe direttamente e questo apparirà 4-2=2 secondi dopo che è stato chiamato. Ecco l'output:

Se non avessimo usato il semaforo, secondo il cambio di contesto, il risultato avrebbe potuto essere come osserva:

Conclusione

In questa guida è stata fornita una panoramica dettagliata dell'uso di POSIXSemaphore con la programmazione C in Ubuntu 20. Utilizzando semplicemente la libreria POSIX o Pthread in un determinato codice C, il semaforo POSIX può essere utilizzato abbastanza facilmente per prevenire condizioni di competizione durante la codifica.

Recensione del mouse wireless Microsoft Sculpt Touch
Ho letto di recente del Microsoft Scolpisci il tocco mouse wireless e ho deciso di acquistarlo. Dopo averlo usato per un po', ho deciso di condividere...
Trackpad e puntatore del mouse su schermo AppyMouse per tablet Windows
Gli utenti di tablet spesso mancano il puntatore del mouse, soprattutto quando sono abituati a usare i laptop laptop. Gli smartphone e i tablet touchs...
Il pulsante centrale del mouse non funziona in Windows 10
Il tasto centrale del mouse ti aiuta a scorrere lunghe pagine web e schermate con molti dati. Se si ferma, finirai per usare la tastiera per lo scorri...