Funzione pthread_exit 3 c

Funzione pthread_exit 3 c
“Potresti aver attraversato molte funzioni di Posix C durante l'utilizzo di qualsiasi sistema operativo Linux. La funzione pThread_exit () è una di quelle funzioni Posix. PThread_exit () viene utilizzato per terminare l'esecuzione del thread chiamante. Il thread chiamante viene terminato utilizzando la funzione pThread_exit () e la sua esecuzione è sospesa utilizzando la funzione pThread_join () fino a quando il thread di destinazione non ha completato la sua esecuzione. Quindi, termina il thread di chiamata e invia lo stato a qualsiasi thread che utilizza l'ID thread del thread di terminazione per chiamare pThread_join (). All'interno di questo tutorial, daremo un'occhiata all'uso della funzione pThread_kill in C."

In primo luogo, è necessario accedere dal sistema Linux e avviare il suo terminale. All'interno della shell, prova a creare un file C utilizzando l'editor VIM e nomina pthread_kill.C. Quando viene aperto nell'editor VIM in modalità Insert, scrivi le righe di codice in basso.

I file di intestazione essenziali sono incorporati nelle prime tre righe di codice, quindi l'intestazione della funzione per la funzione del messaggio di visualizzazione, che accetta un puntatore vuoto, viene dichiarata. Crea una variabile globale successivamente e imposta il suo valore su 0. Sono dichiarate due variabili di tipo pThread_t denominato thread_p & thread_s. PThread_t è un tipo di dati utilizzato per identificare un thread che è stato creato nella funzione principale. Quando il programma effettua chiamate di funzione che richiedono un'identificazione del thread, prende il valore restituito dalla funzione pThread_create ().

Le variabili di puntatore a due caratteri utilizzate per archiviare il messaggio per i thread primari e secondari sono definite nelle seguenti righe di codice. Vengono quindi definiti due numeri interi, con valori di 100 e 200, rispettivamente. In seguito, abbiamo realizzato due thread separati, ognuno dei quali utilizza il metodo del messaggio di visualizzazione. Invia i identificatori e i messaggi di thread generati individualmente a ciascun thread separatamente; Dopo quella stampa, viene chiamata l'istruzione, che è il messaggio prima della terminazione dei thread. Quando usciamo o termiamo i thread quindi, tutta l'esecuzione è sospesa e non verrà visualizzata alcuna uscita. La variabile globale è incrementata da 1 nella funzione del messaggio di visualizzazione.

Vedere i file e le cartelle disponibili nella directory di lavoro inserendo il comando LS nella riga di comando del terminale.

Immettere i comandi elencati di seguito per creare un file che contiene istruzioni relative al thread perché differiscono dalle istruzioni di compilazione standard. Il comando è avviato con il compilatore perché stiamo usando il compilatore GCC e il sistema operativo Linux. Viene quindi impiegato l'interruttore -pThread. Dopo aver specificato il nome del file con il flag -o, il file di output verrà creato con il nome richiesto.

Basta immettere il comando (./uccisione pThread.fuori) nel terminale per eseguire il file di output e visualizzare i risultati. Nessuna istruzione verrà eseguita dopo l'istruzione precedente poiché entrambi i thread sono terminati utilizzando la funzione pThread_exit. Non appena è stato stabilito il thread primario, chiama il metodo del messaggio di visualizzazione, aumentando il valore della variabile globale da 0 a 1, che viene quindi visualizzato. Simile a quello, viene quindi invocato un secondo thread, che visualizza il valore della variabile globale dopo un incremento, con conseguente valore di 2.

Ora crea un altro file di codice di programmazione C utilizzando Vim Editor e scrivi il codice in esso. Il nome del file è pThread_exit.C.

I file di intestazione vitali sono incorporati nelle prime due righe del file di codice. Da ciò, è stata dichiarata una variabile globale e il suo valore è stato impostato su 0. Viene quindi scritta la funzione di visualizzazione e viene dato un parametro di tipo puntatore vuoto. Tutti i thread che creiamo nella nostra funzione principale eseguiranno questo codice. Il valore dell'argomento della variabile ID thread è memorizzato nella prima riga della funzione. Ora che una variabile statica è stata definita e impostata su 0, il suo valore verrà modificato all'interno della funzione. Quindi, abbiamo stampato l'ID thread e i valori delle variabili globali e statiche dopo averli incrementati.

Utilizzare il compilatore GCC per compilare il codice C con l'opzione -pThread, quindi salvare l'output sull'uscita PThread.File fuori. Solo un thread può completare la sua esecuzione poiché utilizziamo lo stesso ID thread per generare più thread e quindi uscire dal thread all'interno del loop.

Ecco l'output del file dopo la compilazione corretta. Significa che se un thread viene terminato utilizzando un'istruzione di uscita, non verrà eseguito nessun altro thread.

Ogni thread viene generato ed eseguito correttamente se modifichiamo leggermente il codice modificando l'istruzione di uscita e spostando la riga al di fuori del loop. Questo è il pezzo di codice indicato nello snippet di seguito:

Dopo la compilazione e quando eseguiamo il file di output, verrà generato l'output di seguito, il che mostra che tutti i thread hanno completato la loro esecuzione. L'output mostra che i valori delle variabili globali e statiche sono gli stessi per tutti i thread, il che significa che viene utilizzato lo stesso riferimento.

Cambiamo un po 'di più il nostro codice e commentiamo l'istruzione pThread_exit alla fine della funzione di visualizzazione. Ecco lo schermo del codice:

Ecco lo screenshot di output del codice sopra. Vengono eseguiti solo tre thread; Puoi vedere i valori delle variabili globali e statiche. Il secondo e il terzo thread hanno gli stessi valori per entrambi.

Conclusione

Questo articolo riguarda l'uso della funzione pThread_kill in C per terminare l'elaborazione di un thread chiamante in un programma, ma il processo di terminazione della funzione chiamata deve essere interrotto per un po 'utilizzando il metodo pThread_join () fino a quando il metodo target è compiuto. Puoi utilizzare i semplici esempi dimostrati sopra per ottenere una chiara comprensione.