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?
std::this_threadThis namespace groups a set of functions that access the current thread.
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.
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.
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)
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With