РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
775 of 815 menu

Функция this_thread::yield

Функция this_thread::yield дает планировщику операционной системы подсказку о том, что текущий поток готов уступить свое процессорное время. Это позволяет другим потокам, которые ожидают выполнения, получить шанс на исполнение. Функция не принимает параметров и не возвращает значения. Она полезна в ситуациях, когда поток выполняет длительную операцию ожидания в цикле, и вы хотите избежать монополизации процессора.

Синтаксис

#include <thread> void this_thread::yield();

Функция объявлена в пространстве имен std::this_thread и доступна при подключении заголовочного файла <thread>.

Пример

Рассмотрим простой пример, где один поток активно выполняется в цикле, а второй поток также пытается выполнять работу. Без вызова yield первый поток может занять все процессорное время:

#include <iostream> #include <thread> using namespace std; void worker(int id) { for (int i = 0; i < 3; i++) { cout << "Thread " << id << " is working" << endl; this_thread::yield(); } } int main() { thread t1(worker, 1); thread t2(worker, 2); t1.join(); t2.join(); return 0; }

Возможный результат выполнения кода:

Thread 1 is working Thread 2 is working Thread 1 is working Thread 2 is working Thread 1 is working Thread 2 is working

Пример

Функция yield часто используется в циклах ожидания, когда поток проверяет некоторое условие. Вместо того чтобы постоянно занимать процессор, поток уступает время другим задачам:

#include <iostream> #include <thread> #include <atomic> using namespace std; atomic<bool> ready(false); void waiter() { while (!ready.load()) { this_thread::yield(); } cout << "Waiter: condition met" << endl; } void setter() { this_thread::sleep_for(chrono::milliseconds(100)); ready.store(true); cout << "Setter: flag is set" << endl; } int main() { thread t1(waiter); thread t2(setter); t1.join(); t2.join(); return 0; }

Результат выполнения кода:

"Setter: flag is set" "Waiter: condition met"

Смотрите также

  • класс thread,
    который представляет собой отдельный поток выполнения
  • функция this_thread::sleep_for,
    которая приостанавливает поток на заданный промежуток времени
  • функция this_thread::sleep_until,
    которая приостанавливает поток до указанного момента времени
  • метод join,
    который ожидает завершения потока
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить