std :: condition_variable :: notify_one () wurde mehrmals aufgerufen, ohne den Kontext zu wechseln

Wie viele wartende Threads werden in diesem Beispiel aktiviert:

1. Faden:

void wakeUp2Threads()
{
    std::unique_lock<std::mutex> lock(condvar_mutex);

    condvar.notify_one();
    condvar.notify_one();
}

2. Faden:

{
    std::unique_lock<std::mutex> lock(condvar_mutex);

    condvar.wait(lock); <- 2nd thread has entered here before 1st thread entered wakeUp2Threads.
}

3. Faden (das selbe wie 2nd):

{
    std::unique_lock<std::mutex> lock(condvar_mutex);

    condvar.wait(lock); <- 3rd thread has entered here before 1st thread entered wakeUp2Threads.
}

Gibt es eine Garantie dafür, dass in diesem Beispiel beide Benachrichtigungen an verschiedene Threads gesendet werden und nicht an denselben Thread mehrmals?

Dh was bedeutet notify_one ():

1) notify one thread, no matter has it been already notified (but has not been woken up yet), or not. (* see note)
or
2) notify one thread, but only this one, which has not been notified yet.

(*) Passt auf! Ich spreche hier nicht über das Szenario "Wartender Thread wurde bereits in der Vergangenheit benachrichtigt, aufgeweckt, erledigt und erneut in condvar.wait () eingegeben" - in diesem Fall können natürlich mehrere notify_one () -Routinen aufwachen der gleiche Thread immer und immer wieder.

Ich spreche von einem anderen Fall:

notify_one () hat den wartenden Thread über das Aufwecken informiert, aber BEVOR dieser wartende Thread das Zeitfenster vom Kernel-Scheduler erhalten und die Ausführung fortgesetzt hat, wurde ein weiterer notify_one () erneut aufgerufen.Ist es möglich, dass diese zweite Benachrichtigung erneut an denselben Thread gesendet wird, obwohl sie noch nicht aus der ersten Benachrichtigung aufgeweckt wurde?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage