Spec-Zone.ru › C++

std::this_thread::yield

Определено в заголовке <thread>
void yield() noexcept;
(с C++11)

Предоставляет подсказку реализации для перепланирования выполнения потоков, позволяя другим потокам выполняться.

Параметры

(нет)

Возвращаемое значение

(нет)

Примечания

Точное поведение этой функции зависит от реализации, в частности от механики используемого планировщика задач ОС и состояния системы. Например, планировщик задач с приоритетом «первый пришёл — первый обслужен» (SCHED_FIFO в Linux) приостановит текущий поток и поместит его в конец очереди потоков с таким же приоритетом, готовых к выполнению (и если других потоков с таким же приоритетом нет, yield не оказывает никакого влияния).

Пример

#include <chrono>
#include <iostream>
#include <thread>
 
// "busy sleep" while suggesting that other threads run 
// for a small amount of time
void little_sleep(std::chrono::microseconds us)
{
    auto start = std::chrono::high_resolution_clock::now();
    auto end = start + us;
    do
    {
        std::this_thread::yield();
    }
    while (std::chrono::high_resolution_clock::now() < end);
}
 
int main()
{
    auto start = std::chrono::high_resolution_clock::now();
 
    little_sleep(std::chrono::microseconds(100));
 
    auto elapsed = std::chrono::high_resolution_clock::now() - start;
    std::cout << "waited for "
              << std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count()
              << " microseconds\n";
}

Возможный вывод:

waited for 128 microseconds

См. также

Документация на C для thrd_yield

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/thread/yield

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API