thrd_yield
|
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
|
(C11)
|
suspende la ejecución del hilo llamante durante el período de tiempo dado
(función) |
|
Documentación de C++
para
yield
|
|