Мне хотелось узнать, в чем разница между С++ 11 std::this_thread::yield()
и std::this_thread::sleep_for()
? И как решить, что использовать? Благодарю.
Std:: this_thread:: yield() vs std:: this_thread:: sleep_for()?
Ответ 1
std::this_thread::yield
сообщает реализации перенести выполнение потоков, которые должны использоваться в случае, когда вы находитесь в состоянии ожидания ожидания, например в пуле потоков:
...
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
можно использовать, если вы действительно хотите подождать определенное количество времени. Это может быть использовано для задачи, где время действительно имеет значение, например: если вы действительно хотите только подождать 2 секунды. (Обратите внимание, что реализация может подождать дольше заданной продолжительности)
Ответ 2
станд:: this_thread:: sleep_for()
сделает ваш поток спящим в течение заданного времени (поток остановлен в течение заданного времени). (http://en.cppreference.com/w/cpp/thread/sleep_for)
станд:: this_thread:: Выход()
остановит выполнение текущего потока и отдаст приоритет другим процессам/потокам (если в очереди ждут другие процессы/потоки). Выполнение потока не останавливается. (он просто освобождает процессор). (http://en.cppreference.com/w/cpp/thread/yield)