Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

std::this_thread::yield() vs std::this_thread::sleep_for()

What is the difference between C++11 std::this_thread::yield() and std::this_thread::sleep_for()? How to decide when to use which one?

like image 640
polapts Avatar asked Jun 15 '12 10:06

polapts


People also ask

What is std :: This_thread?

std::this_threadThis namespace groups a set of functions that access the current thread.

What is CPP yield?

Yield to other threads. The calling thread yields, offering the implementation the opportunity to reschedule. This function shall be called when a thread waits for other threads to advance without blocking.

What is thread yield in C#?

Causes the calling thread to yield execution to another thread that is ready to run on the current processor. The operating system selects the thread to yield to. public: static bool Yield(); C# Copy.


2 Answers

std::this_thread::yield tells the implementation to reschedule the execution of threads, that should be used in a case where you are in a busy waiting state, like in a thread pool:

... while(true) {   if(pool.try_get_work()) {     // do work   }   else {     std::this_thread::yield(); // other threads can push work to the queue now   } } 

std::this_thread::sleep_for can be used if you really want to wait for a specific amount of time. This can be used for task, where timing really matters, e.g.: if you really only want to wait for 2 seconds. (Note that the implementation might wait longer than the given time duration)

like image 73
Stephan Dollberg Avatar answered Oct 06 '22 01:10

Stephan Dollberg


std::this_thread::sleep_for()

will make your thread sleep for a given time (the thread is stopped for a given time). (http://en.cppreference.com/w/cpp/thread/sleep_for)

std::this_thread::yield()

will stop the execution of the current thread and give priority to other process/threads (if there are other process/threads waiting in the queue). The execution of the thread is not stopped. (it just release the CPU). (http://en.cppreference.com/w/cpp/thread/yield)

like image 43
neam Avatar answered Oct 06 '22 01:10

neam