Namespaces
Variants

std::this_thread:: yield

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
yield
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
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