thrd_yield
|
Défini dans l'en-tête
<threads.h>
|
||
|
void
thrd_yield
(
void
)
;
|
(depuis C11) | |
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.
L'équivalent POSIX de cette fonction est
sched_yield
.
Exemple
#include <stdio.h> #include <time.h> #include <threads.h> // fonction utilitaire : différence entre timespec en microsecondes 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; } // attente active avec yield 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)); }
Sortie possible :
Waited for 100.344 us
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.26.5.8 La fonction thrd_yield (p: 281)
- Norme C11 (ISO/IEC 9899:2011):
-
- 7.26.5.8 La fonction thrd_yield (p: 385)
Voir aussi
|
(C11)
|
suspend l'exécution du thread appelant pour la période de temps donnée
(fonction) |
|
Documentation C++
pour
yield
|
|