wollte ich verstehen, was passiert, wenn ein Thread_1 pthread_cond_signal mehrmals auf eine Thread_2 sendet (auf pthread_cond_wait wartet), die ein Signal bereits erhalten hat und nach wie vor in Fortschritt.
Sie können das nicht an erster Stelle tun. pthread_cond_signal
führt eine Operation für eine Bedingungsvariable durch; Es signalisiert keinen bestimmten Thread. Ich nehme an, Sie wollen fragen, was passiert, wenn ein Thread pthread_cond_signal
aufruft und einen Lebenslauf angibt, der zu diesem Zeitpunkt keine Kellner hat.
- Blockiert thread_1, bis das Signal verarbeitet wird?
- Oder wird das Signal an Thread_2 und Thread_1 ignoriert setzt seine Ausführung
Letzteres. pthread_cond_signal
sollte nicht als Versuch interpretiert werden, eine Nachricht an einen bestimmten Thread zu senden. Wenn irgendetwas gemeldet wird, ist es der Kernel oder durch ihn der Lebenslauf. In jedem Fall, wenn ein solcher Aufruf ausgeführt wird, während keine Threads auf dem angegebenen CV warten, hat dies keine Auswirkungen. Es blockiert den aufrufenden Thread sicher nicht.
In beiden oben genannten Fällen können wir erhalten Fehlermeldungen, so dass wir geeignete Maßnahmen (wie Rückkehr entsprechenden Fehler in thread1) nehmen
Nein, denn es ist kein Fehler zu signalisieren, ein Lebenslauf, der keine Kellner hat. Wenn Sie eine Art von synchronem Nachrichtenaustausch durchführen möchten, können Sie dies zusätzlich zu einem Mutex und einem Lebenslauf tun, aber diese liefern nicht das, was Sie wollen.