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