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