Namespaces
Variants
Actions

thrd_yield

From cppreference.com
< c‎ | thread
 
 
Concurrency support library
 
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.

[edit] Parameters

(none)

[edit] Return value

(none)

[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

Run this code
#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

[edit] References

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

[edit] See also

suspends execution of the calling thread for the given period of time
(function) [edit]
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/thread/thrd_yield&oldid=176868"

AltStyle によって変換されたページ (->オリジナル) /