Namespaces
Variants

thrd_yield

From cppreference.net
Definiert im Header <threads.h>
void thrd_yield ( void ) ;
(seit C11)

Gibt dem Implementierungshinweis, die Ausführung von Threads neu zu planen, um anderen Threads die Ausführung zu ermöglichen.

Inhaltsverzeichnis

Parameter

(keine)

Rückgabewert

(keine)

Hinweise

Das genaue Verhalten dieser Funktion hängt von der Implementierung ab, insbesondere von der Funktionsweise des verwendeten Betriebssystem-Schedulers und dem Zustand des Systems. Beispielsweise würde ein Echtzeit-Scheduler nach dem First-In-First-Out-Prinzip ( SCHED_FIFO in Linux) den aktuellen Thread anhalten und ihn an das Ende der Warteschlange von Threads mit derselben Priorität setzen, die bereit zur Ausführung sind, und wenn es keine anderen Threads mit derselben Priorität gibt, yield hat keine Wirkung.

Das POSIX-Äquivalent dieser Funktion ist sched_yield .

Beispiel

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

Mögliche Ausgabe:

Waited for 100.344 us

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 7.26.5.8 Die thrd_yield-Funktion (S: 281)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.26.5.8 Die thrd_yield-Funktion (S: 385)

Siehe auch

Unterbricht die Ausführung des aufrufenden Threads für den angegebenen Zeitraum
(Funktion)