std::this_thread:: yield
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert in Header
<thread>
|
||
|
void
yield
(
)
noexcept
;
|
(seit C++11) | |
Gibt dem Implementierungshinweis, die Ausführung von Threads neu zu planen, um anderen Threads die Ausführung zu ermöglichen.
Inhaltsverzeichnis |
Parameter
(keine)
Rückgabewert
(keine)
Hinweise
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 First-In-First-Out-Prinzip (
SCHED_FIFO
in Linux) den aktuellen Thread anhalten und ihn an das Ende der Warteschlange von Threads mit derselben Priorität setzen, die bereit zur Ausführung sind, und wenn es keine anderen Threads mit derselben Priorität gibt,
yield
hat keine Wirkung.
Beispiel
#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
Siehe auch
|
C-Dokumentation
für
thrd_yield
|