Namespaces
Variants

thrd_yield

From cppreference.net
Definido en el encabezado <threads.h>
void thrd_yield ( void ) ;
(desde C11)

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 pondrí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.

El equivalente POSIX de esta función es sched_yield .

Ejemplo

#include <stdio.h>
#include <time.h>
#include <threads.h>
// utility function: difference between timespecs in microseconds
double usdiff(struct timespec s, struct timespec e)
{
    double sdiff = difftime(e.tv_sec, s.tv_sec);
    long nsdiff = e.tv_nsec - s.tv_nsec;
    if(nsdiff < 0) return 1000000*(sdiff-1) + (1000000000L+nsdiff)/1000.0;
    else return 1000000*(sdiff) + nsdiff/1000.0;
}
// busy wait while yielding
void sleep_100us()
{
    struct timespec start, end;
    timespec_get(&start, TIME_UTC);
    do {
        thrd_yield();
        timespec_get(&end, TIME_UTC);
    } while(usdiff(start, end) < 100.0);
}
int main()
{
    struct timespec start, end;
    timespec_get(&start, TIME_UTC);
    sleep_100us();
    timespec_get(&end, TIME_UTC);
    printf("Waited for %.3f us\n", usdiff(start, end));
}

Salida posible:

Waited for 100.344 us

Referencias

  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.26.5.8 La función thrd_yield (p: 281)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.26.5.8 La función thrd_yield (p: 385)

Véase también

suspende la ejecución del hilo llamante durante el período de tiempo dado
(función)