< c‎ | thread
Defined in header <threads.h>
void thrd_yield();
(since C11)

Provides a hint to the implementation to reschedule the execution of threads, allowing other threads to run.


[edit] Parameters


[edit] Return value


[edit] Notes

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.

[edit] Example

#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 {
        timespec_get(&end, TIME_UTC);
    } while(usdiff(start, end) < 100.0);
int main()
    struct timespec start, end;
    timespec_get(&start, TIME_UTC);
    timespec_get(&end, TIME_UTC);
    printf("Waited for %.3f us\n", usdiff(start, end));

Possible output:

Waited for 100.344 us

[edit] References

  • C11 standard (ISO/IEC 9899:2011):
  • The thrd_yield function (p: 385)

[edit] See also

suspends execution of the calling thread for the given period of time
(function) [edit]