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

Класс barrier

Класс barrier представляет собой механизм синхронизации, который блокирует группу потоков до тех пор, пока все они не достигнут барьера. Когда последний поток достигает барьера, все ожидающие потоки освобождаются и продолжают выполнение. Первым параметром конструктор принимает количество потоков, которые должны достичь барьера, а вторым - функцию, которая вызывается при срабатывании барьера.

Синтаксис

#include <barrier> std::barrier<CompletionFunction> name(num);

Пример

Давайте создадим барьер для 3 потоков и посмотрим, как они синхронизируются:

#include <iostream> #include <thread> #include <barrier> using namespace std; int main() { barrier bar(3); auto task = [&bar](int id) { cout << "Thread " << id << " before barrier" << endl; bar.arrive_and_wait(); cout << "Thread " << id << " after barrier" << endl; }; thread t1(task, 1); thread t2(task, 2); thread t3(task, 3); t1.join(); t2.join(); t3.join(); return 0; }

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

"Thread 1 before barrier" "Thread 2 before barrier" "Thread 3 before barrier" "Thread 1 after barrier" "Thread 2 after barrier" "Thread 3 after barrier"

Пример

Давайте создадим барьер с функцией завершения, которая выводит сообщение при срабатывании:

#include <iostream> #include <thread> #include <barrier> using namespace std; int main() { barrier bar(2, []() noexcept { cout << "Barrier completed!" << endl; }); auto task = [&bar](int id) { cout << "Thread " << id << " started" << endl; bar.arrive_and_wait(); cout << "Thread " << id << " finished" << endl; }; thread t1(task, 1); thread t2(task, 2); t1.join(); t2.join(); return 0; }

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

"Thread 1 started" "Thread 2 started" "Barrier completed!" "Thread 1 finished" "Thread 2 finished"

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

  • класс latch,
    который реализует одноразовый барьер
  • класс counting_semaphore,
    который управляет доступом к ресурсам
  • класс jthread,
    который автоматически присоединяет поток
  • метод join,
    который ожидает завершения потока
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить