thrd_yield
|
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
|
(C11)
|
Unterbricht die Ausführung des aufrufenden Threads für den angegebenen Zeitraum
(Funktion) |
|
C++ documentation
für
yield
|
|