Namensräume
Varianten
Aktionen

std::this_thread::yield

Von cppreference.com
< cpp‎ | thread
 
 
Bibliothek für nebenläufige Programmierung
Threads
(C++11)
(C++20)
this_thread Namespace
(C++11)
yield
(C++11)
(C++11)
Kooperatives Beenden
Gegenseitiger Ausschluss
(C++11)
Allgemeines Sperrungsmanagement
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Bedingungsvariablen
(C++11)
Semaphoren
Latches und Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
Sichere Wiederherstellung
(C++26)
Hazard Pointer
Atomare Typen
(C++11)
(C++20)
Initialisierung von atomaren Typen
(C++11)(veraltet in C++20)
(C++11)(veraltet in C++20)
Speicherordnung
(C++11)(deprecated in C++26)
Freie Funktionen für atomare Operationen
Freie Funktionen für atomare Flags
 
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

#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