Semafori posix in c

Semafori posix in c

“Sebbene ogni linguaggio di programmazione abbia molte librerie per scopi specifici, la biblioteca Posix di C ha il suo posto. È stato progettato per creare una grande armonizzazione tra i processi e aiuta molto a utilizzare il multithreading all'interno dei programmi, i.e., Creazione di più thread e sincronizzare la loro esecuzione. All'interno di questa guida oggi, vedrai una semplice illustrazione dell'uso di semafori Posix in C. Per gli esempi di codice C di base, dobbiamo configurare il suo compilatore nel sistema. Ma, prima di allora, dobbiamo aggiornare il sistema in quanto è necessario per l'esecuzione regolare del codice. Pertanto, la query visualizzata nello snap allegato è un must per aggiornare e aggiornare il sistema operativo Linux con l'utilità "APT"."


Questo processo ha richiesto circa 55 kb di spazio sulla piattaforma Linux per eseguire senza problemi gli aggiornamenti. Se sei disposto a dare molto spazio, tocca "y" per andare avanti. L'elaborazione sarà completata in alcuni minuti.


Dopo che il sistema è stato completamente aggiornato, configureremo il compilatore del linguaggio C nel nostro sistema con l'utilità APT-get nel comando "installa". Usa "GCC" come parola chiave, e basta.

Sem_init ()

Verrebbe creato un nuovo semaforo quando esiste già un semaforo non identificato a "S"; Altrimenti, questo semaforo già esistente verrà scartato. In tutto questo metodo, "S" sta per un'istanza di semaforo che è stata costruita e condivisa è un segnale o un snegato che indica se il semaforo può essere distribuito con un metodo forked () o altrimenti. Il valore di input funge da punto di partenza impostato del semaforo.

Int sem_init (sem

Sem_wait ()

Eseguendo un'azione di blocco semaforo sul semaforo specificato da "s", il metodo sem_wait () contiene quel semaforo. La procedura SEM-Wait verrà utilizzata per conservare un semaforo o lasciarlo in linea. Alcuni dei processi precedentemente sovraccarichi si risvegliano quando qualche altro processo invoca sem_post ().

int sem_wait (sem_t *s);

Sem_post ()

Quando viene chiamato SEM Post, il valore è aumentato e quindi una delle operazioni precedentemente eseguite o in attesa di funzionamento, I.e., Sblocca il semaforo già bloccato.

int sem_post (sem_t *s);

Sem_destroy ()

Un semaforo senza nome inizializzato viene distrutto impiegando la funzione SEM Destroy ().

int sem_destroy (sem_t *s);

Esempio

Per comprendere i semafori, prima creeremo un file C e poi aggiungeremo un codice ad esso. Per crearne uno, usa la query "Touch" e troverai il nuovo file nella cartella Home del sistema.


Ora, devi aprire il tuo file C vuoto con un semplice editor per generare un buon codice in esso. Finora abbiamo provato l'editore "nano", come mostrato nello scatto sotto.


Come tutti sappiamo che tutti i linguaggi di programmazione non possono funzionare senza librerie in quanto queste librerie detengono un gran numero di classi, strutture, funzioni e oggetti da utilizzare per il funzionamento generale del sistema. Quindi stiamo iniziando questo programma C con l'uso di alcune librerie di base e indispensabili per i semafori Posix.

Per utilizzare queste librerie nel codice, dobbiamo utilizzare il carattere "#" con la parola chiave "include" per ogni libreria. In questo momento, abbiamo aggiunto un totale di 4 librerie che devono avere in questo programma. Altrimenti, il nostro programma non funzionerà correttamente. Il primo "stdio.La libreria di intestazione h "è di solito un must in ogni programma C perché ci consente di avere operazioni di input e output nel codice. Pertanto, lo stiamo usando per aggiungere senza intoppi input e ottenere output dal codice. La seconda libreria che stiamo usando qui è la "pthread.h "che è un must per l'uso della programmazione del thread, i.e., multithreading.

Useremo questa libreria per creare thread in un programma. La libreria successiva e più importante in questo codice è il "semaforo.H". È stato utilizzato per sincronizzare senza intoppi i fili. Ultimo ma non meno importante, la biblioteca è "unistd.H ", che ci consente di utilizzare funzioni e costanti varie definite dall'utente. Ora, abbiamo dichiarato il semaforo "S" usando l'oggetto incorporato "SEM_T" della libreria semaforo. Ecco che arriva la funzione definita dall'utente "t" senza tipo di ritorno. Ha utilizzato alcune funzioni di semaforo integrate per eseguire la sincronizzazione. La funzione sem_wait () è qui per tenere il semaforo "s" usando il carattere "&".

All'interno della sospensione, l'istruzione printf () è stata eseguita insieme alla funzione "sleep" per far dormire questo programma per 4 secondi. Un'altra istruzione printf () visualizza un nuovo messaggio e la funzione sem_post () viene eseguita per rilasciare il blocco su semaforo "s."

#includere
#includere
#includere
#includere
sem_t s;
void * t (void * arg)
sem_wait (& s);
printf ("Benvenuto! \N");
sonno (4);
printf ("ciao!\N");
sem_post (& s);

Diamo una buona occhiata al metodo principale () di questo programma C per i semafori. La funzione sem.e., "0", e il suo punto di partenza è impostato su 1. L'oggetto pThread_t dalla libreria PThread di C è stato utilizzato per creare due thread usando due oggetti thread, O1 e O2. L'istruzione printf () è qui per visualizzare che creeremo il primo thread usando la funzione pThread_create () alla riga successiva.

Abbiamo passato l'oggetto thread O1 a questa funzione con restrizioni nulle e la funzione di chiamata "t" passandolo nei parametri. Dopo un sonno di 4 secondi, un altro thread è stato creato con l'oggetto O2 e la funzione pThread_join () viene utilizzata qui per unire i thread con una funzione principale (). La funzione SEM_DESTROY () è qui per distruggere il semaforo "s" e anche tutti i thread bloccati verranno rilasciati.

int main ()
sem_init (& s, 0, 1);
pThread_t O1, O2;
printf ("in un primo thread ora ... \ n");
pThread_create (& o1, null, t, null);
sonno (4);
printf ("in un 2 ° thread ora ... \ n");
pthread_create (& o2, null, t, null);
pThread_Join (O1, null);
pThread_Join (O2, null);
sem_destroy (& s);
restituzione 0;

Stiamo compilando il programma C con il compilatore "GCC"; Le opzioni "-Lrt" e "-lpThread" sono utilizzate per eseguire le funzioni del thread POSIX. All'esecuzione del ".UN/.fuori ”query, il primo thread è stato creato. Va a dormire dopo aver stampato il primo messaggio.


Il secondo thread è stato sincronizzato e dopo 4 secondi, il primo thread è stato rilasciato e il secondo thread è stato bloccato per 4 secondi.


Alla fine, anche il secondo thread è stato rilasciato.

Conclusione

Questo è tutto sui semafori Posix in C mentre utilizzano alcune delle sue funzioni principali per sincronizzare diversi thread. Dopo aver esaminato questo articolo, sarai in grado di capire sempre di più.