thrd_yield
Von cppreference.com
| 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
Führen Sie diesen Code aus
#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
| (C11) |
setzt die Ausführung des aufrufenden Threads für die angegebene Zeitspanne aus (Funktion) |
| C++ Dokumentation für yield
| |