std::this_thread::yield
Von cppreference.com
| Definiert in Header <thread> |
||
| void yield() noexcept; |
(seit C++11) | |
Gibt einen Hinweis an die Implementierung, die Ausführung von Threads neu zu planen, damit andere Threads laufen können.
Inhalt |
[bearbeiten] Parameter
(keine)
[bearbeiten] Rückgabewert
(keine)
[bearbeiten] Anmerkungen
Das genaue Verhalten dieser Funktion hängt von der Implementierung ab, insbesondere von der Funktionsweise des verwendeten Betriebssystem-Schedulers und dem Zustand des Systems. Beispielsweise würde ein Echtzeit-Scheduler nach dem Prinzip "First-In, First-Out" (SCHED_FIFO unter Linux) den aktuellen Thread unterbrechen und ihn in die Warteschlange der Threads gleicher Priorität, die zum Laufen bereit sind, am Ende einreihen. Wenn keine anderen Threads mit derselben Priorität vorhanden sind, hat yield keine Auswirkung.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <chrono> #include <iostream> #include <thread> // "busy sleep" while suggesting that other threads run // for a small amount of time void little_sleep(std::chrono::microseconds us) { auto start = std::chrono::high_resolution_clock::now(); auto end = start + us; do { std::this_thread::yield(); } while (std::chrono::high_resolution_clock::now() < end); } int main() { auto start = std::chrono::high_resolution_clock::now(); little_sleep(std::chrono::microseconds(100)); auto elapsed = std::chrono::high_resolution_clock::now() - start; std::cout << "waited for " << std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count() << " microseconds\n"; }
Mögliche Ausgabe
waited for 128 microseconds
[bearbeiten] Siehe auch
| C-Dokumentation für thrd_yield
|