Namespaces
Variants

thrd_yield

From cppreference.net
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

suspend l'exécution du thread appelant pour la période de temps donnée
(fonction)