Perché Pthread_cond_wait ha bisogno di un mutex?
Perché Pthread_cond_wait ha bisogno di un mutex?

Video: Perché Pthread_cond_wait ha bisogno di un mutex?

Video: Perché Pthread_cond_wait ha bisogno di un mutex?
Video: Script Bash - Creare COMANDI per terminale PERSONALIZZATI!! - Ep.05 2024, Maggio
Anonim

Il mutex viene utilizzato per proteggere la variabile di condizione stessa. Ecco perché tu bisogno si è bloccato prima di te fare un'attesa. Quindi, quando la variabile di condizione viene segnalata o trasmessa a, uno o più thread in lista d'attesa verranno svegliati e il mutex sarà magicamente bloccato di nuovo per quel thread.

A questo proposito, Pthread_cond_wait sblocca il mutex?

Il pthread_cond_wait () la funzione blocca il thread chiamante sulla variabile di condizione cond, e sblocca gli associati mutex mutex . Il thread chiamante deve essere bloccato mutex prima di attendere la variabile di condizione. Al ritorno dalla funzione, il mutex è di nuovo bloccato e di proprietà del thread chiamante.

Successivamente, la domanda è: perché è necessario il mutex? Garantisce che solo un thread alla volta esegua un pezzo di codice chiave, il che a sua volta limita l'accesso a una struttura di dati. Assicura che entrambi i thread abbiano una visione completa e corretta di quella memoria indipendentemente da qualsiasi riordino della CPU. Il mutex è una necessità assoluta quando si esegue la programmazione simultanea.

Oltre a sopra, perché le variabili di condizione hanno bisogno del mutex?

Il mutex è usato per proteggere il variabile di condizione si. Ecco perché tu bisogno si è bloccato prima di te fare un'attesa. Poi quando il la variabile di condizione è segnalato o trasmesso a, uno o più thread in lista d'attesa volere essere svegliato e il mutex essere magicamente bloccato di nuovo per quel thread.

Perché abbiamo bisogno delle variabili di condizione?

Variabili di condizione lascia che una serie di thread dorma fino al solletico! Puoi solleticare un thread o tutti i thread che stanno dormendo. Se riattivi solo un thread, il sistema operativo deciderà quale thread riattivare.

Consigliato: