Defined in header <threads.h> | ||
---|---|---|
void thrd_yield(void); | (since C11) |
Provides a hint to the implementation to reschedule the execution of threads, allowing other threads to run.
(none).
(none).
The exact behavior of this function depends on the implementation, in particular on the mechanics of the OS scheduler in use and the state of the system. For example, a first-in-first-out realtime scheduler (SCHED_FIFO
in Linux) would suspend the current thread and put it on the back of the queue of the same-priority threads that are ready to run (and if there are no other threads at the same priority, yield
has no effect).
The POSIX equivalent of this function is sched_yield.
#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)); }
Possible output:
Waited for 100.344 us
(C11) | suspends execution of the calling thread for the given period of time (function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/c/thread/thrd_yield