Qual è la differenza tra Notify_all () e Notify_One () di STD :: Condizione_variable?
-
14-11-2019 - |
Domanda
Attualmente, sto implementazione di un progetto multi-thread utilizzando std::thread
in C ++ 11.Io uso std::condition_variable
per sincronizzare i thread.In dettaglio, una funzione consumer chiama la funzione membro di wait()
di std::condition_variable
per attendere l'attività da una coda di attività globali, un'altra funzione di produttore genera e mette le attività nella coda.Ma non conosco la differenza tra notify_all()
e Funzioni membro di notify_one()
di std::condition_variable
.Quale funzione dovrei usare nella funzione produttore?Grazie!
Soluzione
Se ci sono dieci fili bloccati sulla variabile delle condizioni, ad esempio, notify_one()
sbloccano solo un thread, mentre notify_all()
li sblocca tutti.Nel tuo caso, ti consigliamo di utilizzare notify_one()
in modo da non svegliarti i thread che non hanno alcun lavoro in attesa di loro.