Spec-Zone.ru › C++

std::this_thread::yield

Определено в заголовочном файле <thread>
void yield() noexcept;
(начиная с C++11)

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

Параметры

(нет)

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

(нет)

Примечания

Точное поведение этой функции зависит от реализации, в частности от механизма используемого планировщика ОС и состояния системы. Например, планировщик реального времени с очередью FIFO (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/cpp/thread/yield

Spec-Zone.ru

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