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
Definido en el encabezado <thread>
void yield ( ) noexcept ;
(desde C++11)

Proporciona una sugerencia a la implementación para reprogramar la ejecución de hilos, permitiendo que otros hilos se ejecuten.

Contenidos

Parámetros

(ninguno)

Valor de retorno

(ninguno)

Notas

El comportamiento exacto de esta función depende de la implementación, en particular de la mecánica del planificador del SO en uso y del estado del sistema. Por ejemplo, un planificador de tiempo real primero en entrar, primero en salir ( SCHED_FIFO en Linux) suspendería el hilo actual y lo colocaría al final de la cola de hilos de la misma prioridad que están listos para ejecutarse, y si no hay otros hilos en la misma prioridad, yield no tiene efecto.

Ejemplo

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

Salida posible:

waited for 128 microseconds

Véase también

Documentación de C para thrd_yield