Ich wollte wissen, was ist der Unterschied zwischen C++ 11 std::this_thread::yield()
und std::this_thread::sleep_for()
? Und wie zu entscheiden, was zu verwenden? Vielen Dank.Standard :: this_thread :: yield() vs Std :: this_thread :: sleep_for()?
Antwort
std::this_thread::yield
erzählt die Durchführung die Ausführung von Threads neu zu planen, die in einem Fall verwendet werden sollen, wenn Sie in einem langen Wartezustand, wie in einem Thread-Pool sind:
...
while(true) {
if(pool.try_get_work()) {
// do work
}
else {
std::this_thread::yield(); // other threads can push work to the queue now
}
}
std::this_thread::sleep_for
kann, wenn Sie verwendet werden, Ich möchte wirklich auf eine bestimmte Zeit warten. Dies kann für Aufgaben verwendet werden, bei denen das Timing wirklich zählt, z. B. wenn Sie wirklich nur 2 Sekunden warten möchten. (Beachten Sie, dass die Umsetzung möglicherweise länger warten als die vorgegebene Zeitdauer)
Also, bedeutet es, dass std :: this_thread :: yield die Ausführung für 'einige Zeit' aufgibt und es erneut versucht? Wie funktioniert der Thread beim nächsten Mal? – polapts
@polapts Ja, 'std :: this_thread :: yield' erlaubt dem Scheduler nur, einen anderen Thread auszuführen. Wenn der Scheduler zu diesem Thread zurückkehrt, wird er nach dem Aufruf von 'std :: this_thread :: yield 'weiterarbeiten – inf
std :: this_thread :: sleep_for()
wird der Thread Schlaf für eine bestimmte Zeit machen (der Thread gestoppt wird eine bestimmte Zeit). (http://en.cppreference.com/w/cpp/thread/sleep_for)
std :: :: this_thread Ausbeute()
wird die Ausführung des aktuellen Threads stoppen und vorrangig zu anderen Prozess/Fäden (wenn es andere Prozess/Threads wartet in der Warteschlange). Die Ausführung des Threads wird nicht gestoppt. (Es gibt nur die CPU frei). (http://en.cppreference.com/w/cpp/thread/yield)
- 1. Alternative zu Std :: this_thread :: sleep_for()
- 2. std :: this_thread :: sleep_for() und GCC
- 3. Windows 7: Überschießen C++ std :: this_thread :: sleep_for
- 4. Fehler: 'std :: this_thread' wurde nicht
- 5. std :: this_thread :: sleep_for schläft kürzer als in VS2015 erwartet
- 6. Kann ich `std :: this_thread :: sleep_for()` mit einem MPI-Prozess verwenden?
- 7. Std :: Thread-Klasse vs Std :: this_thread Namespace in C++?
- 8. C++ 11 'native_handle' ist kein Mitglied von 'std :: this_thread'
- 9. Ist es in Ordnung, std :: this_thread * -Funktionen von boost :: threads zu verwenden?
- 10. Threadpool-Implementierung: condition_variables vs. yield()
- 11. Mit sleep_for() in Qt-Anwendung
- 12. Sollte ich usleep durch sleep_for austauschen
- 13. Dezimalwert von: cout << dec << boost :: this_thread :: get_id()
- 14. Events vs. Yield
- 15. Wie zu std :: Thread Schlaf
- 16. Warum löscht std :: map < std::map > Speicher nicht?
- 17. std :: condition_variable warum benötigt es ein std :: mutex
- 18. sekunden als doppelt in std :: chrono :: duration konvertieren?
- 19. Std :: Thread erkennen Hauptthread
- 20. Ich kann nicht komisch std :: atomic_short.load() Verhalten
- 21. std :: unique_ptr vs std :: shared_ptr vs std :: weak_ptr vs std :: auto_ptr vs raw Zeigern
- 22. Concurrent std :: call_once ruft
- 23. C++ 11: Was passiert, wenn Sie nicht beitreten nennen() für std :: thread
- 24. std :: konditional vs std :: enable_if
- 25. std :: mem_fun vs std :: mem_fn
- 26. Python: yield- und Yield-Zuweisung
- 27. 2 unabhängige Std-Threads in Qt Gui Anwendung
- 28. Was sind die Anwendungsfälle für std :: unique_lock :: release?
- 29. Std :: WCstok in VS 2015
- 30. Warten Sie genau für 20 Millisekunden
möglich duplizieren von [Geben Sie die Zeitscheibe für den aktuellen Thread in C++] (http://stackoverflow.com/questions/11048657/giving-up-the-time-slice-for-current-thread -in-c) – ypnos
Es scheint dort nicht beantwortet zu werden. – polapts
'Ausbeute' wirft nicht. 'sleep_for' darf werfen. – dirkgently