Namensräume
Varianten
Aktionen

thrd_yield

Von cppreference.com
< c‎ | thread
Definiert im Header <threads.h>
void thrd_yield(void);
(seit C11)

Gibt einen Hinweis an die Implementierung, die Ausführung von Threads neu zu planen, sodass andere Threads laufen können.

Inhalt

[bearbeiten] Parameter

(keine)

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Hinweise

Das genaue Verhalten dieser Funktion hängt von der Implementierung ab, insbesondere von der Mechanik des verwendeten Betriebssystem-Schedulers und dem Zustand des Systems. Zum Beispiel würde ein First-In-First-Out-Echtzeit-Scheduler (SCHED_FIFO unter Linux) den aktuellen Thread suspendieren und ihn an das Ende der Warteschlange von lauffähigen Threads gleicher Priorität stellen. Wenn keine anderen Threads mit der gleichen Priorität vorhanden sind, hat yield keine Auswirkung.

Das POSIX-Äquivalent dieser Funktion ist sched_yield.

[bearbeiten] 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

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

setzt die Ausführung des aufrufenden Threads für die angegebene Zeitspanne aus
(Funktion) [bearbeiten]