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
Défini dans l'en-tête <thread>
void yield ( ) noexcept ;
(depuis C++11)

Fournit une indication à l'implémentation pour reprogrammer l'exécution des threads, permettant à d'autres threads de s'exécuter.

Table des matières

Paramètres

(aucun)

Valeur de retour

(aucun)

Notes

Le comportement exact de cette fonction dépend de l'implémentation, en particulier de la mécanique de l'ordonnanceur du système d'exploitation utilisé et de l'état du système. Par exemple, un ordonnanceur temps réel premier entré, premier sorti ( SCHED_FIFO sous Linux) suspendrait le thread actuel et le placerait à la fin de la file des threads de même priorité prêts à s'exécuter, et s'il n'y a pas d'autres threads à la même priorité, yield n'a aucun effet.

Exemple

#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";
}

Sortie possible :

waited for 128 microseconds

Voir aussi

Documentation C pour thrd_yield