Подтвердить что ты не робот

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

Мне хотелось узнать, в чем разница между С++ 11 std::this_thread::yield() и std::this_thread::sleep_for()? И как решить, что использовать? Благодарю.

4b9b3361

Ответ 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)