La funzione sem_getvalue () ottiene il valore del semaforo. Ottiene il valore o è un semaforo chiamato o senza nome semaforo. Nel caso del valore zero del semaforo, restituisce un valore negativo. Quando alcuni thread stanno aspettando sul semaforo, restituisce un valore negativo. Il valore assoluto di quel tipo di intero negativo rappresenta il numero di thread in attesa di semaforo. La funzione "sem_getvalue ()" è definita nel "semaforo. File di intestazione h ". Passeremo attraverso questa funzione "sem_getvalue ()" in questa guida e dimostreremo gli esempi in cui utilizziamo questa funzione "sem.
Sintassi:
# int sem_getvalue (sem_t * sem, int * valore);Esempio 1:
Gli esempi di questa guida funzionerà con Ubuntu 20.04. Per eseguire questi esempi su Ubuntu 20.04, il compilatore GCC deve essere installato. Un piccolo bit del codice C viene generato quando GCC è installato per dimostrare come utilizzare la funzione "sem_getvalue ()" nella programmazione C. Alcuni file di intestazione vengono utilizzati all'inizio del codice. Abbiamo lo "stdio. H ”file di intestazione come segue che è il file di intestazione input/output predefinito. Dobbiamo aggiungere questo file di intestazione quando stiamo scrivendo il codice C.
Dopo questo, mettiamo il "semaforo. File di intestazione h ". Includiamo questo file di intestazione in modo da poter utilizzare la funzione "sem_getvalue ()" in quanto è definita in questo file di intestazione. Quindi, mettiamo qui la funzione "main ()". Usiamo il tipo di dati "int" con questa funzione "main ()". Abbiamo anche il "sem_t" con il nome "my_sem". Qui, viene dichiarato "my_sem" e viene anche dichiarato "num" del tipo di dati "int". Di seguito, utilizziamo la funzione "sem_init ()". Questo "sem_init" contiene tre parametri. Il primo parametro è il "& my_sem" che inizializza il semaforo. Il secondo parametro indica come viene utilizzato o condiviso questo semaforo.
Qui, mettiamo "0" come secondo parametro, il che significa che è l'unico thread in esecuzione nel processo esistente che userà questo semaforo. Il terzo parametro descrive il valore preliminare del semaforo. Qui, abbiamo messo il valore iniziale di questo semaforo come "10". Dopo questo, abbiamo la funzione "sem_getvalue ()" che ottiene il valore preliminare del semaforo. Passiamo i due parametri come "& my_sem" e "& num". Il numero del semaforo è ottenuto in questo modo. Ora, stampiamo questo numero sullo schermo del terminale digitando l'istruzione "printf". I dati scritti qui sono resi sullo schermo.
Abbiamo due comandi per ottenere l'output di questo codice. Dobbiamo mettere "-lpThread" e "-Lrt" con la prima istruzione e premere Invio. Dopo una raccolta di successo, eseguiamo il secondo comando e rendiamo l'output. In questo output puoi vedere che visualizza il valore iniziale del semaforo.
Esempio n. 2:
Abbiamo due file di intestazione qui, "stdio. H "e" Semaforo. h ", di cui abbiamo già discusso nel nostro codice precedente. Abbiamo il "int main ()". Sotto questo, c'è il "sem t" chiamato "my_sem" e "new_sem". In questo caso, sono dichiarati "my_sem" e "new_sem" e il "num" e "valore" sono anche dichiarati come il tipo di dati "int". Abbiamo anche la funzione "sem_init ()" e passiamo i tre parametri.
Quindi, utilizziamo la funzione "sem_getvalue ()" per ottenere il valore iniziale che abbiamo superato come terzo parametro della funzione "sem. Di seguito, utilizziamo nuovamente la funzione "sem_init ()" allo stesso modo in cui abbiamo utilizzato la funzione precedente. Quindi, otteniamo il valore iniziale con l'aiuto della funzione "sem_getvalue ()" e la stampa.
Qui, abbiamo due linee diverse sull'output. Innanzitutto, otteniamo il valore del primo semaforo e lo visualizziamo e poi otteniamo il valore iniziale del secondo semaforo e lo stampano sulla schermata di output.
Esempio #3:
Aggiorniamo un po 'il codice precedente qui. Il codice è identico a quello che abbiamo sviluppato in precedenza. Posizioniamo i due file di intestazione: "stdio. H "e" Semaforo. h " - che sono essenziali per questo codice e utilizzano la funzione" int main () ". Sotto questa funzione principale, dichiariamo il semaforo e il valore che è il tipo di dati "int". Quindi, inizializziamo il semaforo usando "sem_init" e passiamo i parametri di questa funzione. Quindi, otteniamo il valore iniziale di questo semaforo usando la funzione "sem_getvalue ()". Quindi stampalo allo stesso modo di descrivere in precedenza.
Qui, aggiungiamo una nuova funzione che è la funzione "sem_wait ()". Utilizziamo questa funzione per bloccare il semaforo. Quindi, utilizziamo di nuovo questa funzione "sem_getvalue ()". Vedrai nell'output come ottiene il valore iniziale dopo la funzione "sem_wait ()". Stampiamo anche quel valore utilizzando la funzione "printf ()".
In questo screenshot, puoi vedere che il primo valore iniziale del semaforo è "10" ma dopo la funzione "sem_wait ()", ottiene il valore che è "9". Stampa il valore "9" dopo la funzione "sem_wait ()".
Conclusione
Abbiamo fornito questa guida per spiegare in dettaglio la funzione "sem_getvalue ()". Lo scopo, i codici e i risultati della funzione "sem_getvalue ()" sono stati affrontati in questa guida. Questa guida ha già discusso della funzione C "sem_getvalue ()". Abbiamo discusso che la funzione "sem_getvalue ()" in C viene utilizzata per ottenere il valore del semaforo. Abbiamo attraversato i tre diversi esempi. Sono necessari l'output di ogni esempio e il codice sorgente C per utilizzare la funzione "sem_getvalue ()". Dopo aver letto attentamente questa guida e eseguito quei codici da solo, siamo certi che afferrerai facilmente questo concetto.