In che modo condition_variable :: notify_one () seleziona quale thread sbloccare?

4

notify_one() della libreria di thread C ++ 11 viene utilizzato per sbloccare uno dei thread in attesa.

Come sceglie quale thread sbloccare?

Per cominciare, ho provato a cercare su Google, ma non ho trovato nessuna risposta appropriata (nemmeno sulla rete Stack Exchange), anche se ho letto da qualche parte che la selezione del thread è "non specificata".

Quindi ho deciso di verificare le specifiche C ++ e ho fatto riferimento al paragrafo 30.5.1 della bozza di lavoro di novembre 2014 (disponibile gratuitamente), ha detto

Effects: If any threads are blocked waiting for *this, unblocks one of those threads.

Chiaramente, anche le specifiche non menzionano su cosa si basa la selezione, quindi ho deciso di porre questa domanda.

    
posta Aby 03.07.2015 - 12:40
fonte

1 risposta

5

arbitrariamente. Le maniglie dei thread in attesa vengono inserite in un contenitore e in notify_one ne sceglierà una, la riattiverà e la rimuoverà. Solitamente quello che si trova più facilmente nella struttura.

Se si specifica che la condizione è fiera , è la più vecchia. Spesso selezionato mantenendo un buffer circolare ordinato che può crescere in base alle esigenze.

    
risposta data 03.07.2015 - 12:49
fonte

Leggi altre domande sui tag