Namespaces
Variants

std::experimental:: flex_barrier

From cppreference.net
Определено в заголовочном файле <experimental/barrier>
class flex_barrier ;
(concurrency TS)

Класс std::experimental::flex_barrier предоставляет механизм координации потоков, который позволяет группе участвующих потоков блокироваться до завершения операции. В отличие от std::experimental::latch , барьеры являются повторно используемыми; как только участвующие потоки освобождаются из точки синхронизации барьера, они могут повторно использовать тот же барьер.

Барьер имеет фазу завершения, которая выполняется одним из участвующих потоков после того, как все потоки в наборе участвующих потоков достигают точки синхронизации. Вызовы arrive_and_wait и arrive_and_drop синхронизируются с началом фазы завершения; конец фазы завершения синхронизируется с возвратом из всех вызовов, заблокированных до её завершения.

std::experimental::flex_barrier позволяет пользователю управлять фазой завершения с помощью функционального объекта. Если функциональный объект возвращает -1, набор участвующих потоков остается неизменным (и тот же набор участвующих потоков должен достичь точки синхронизации в следующем цикле); в противном случае набор участвующих потоков становится новым набором с размером, равным возвращенному значению N , и состоит из следующих N потоков, которые достигнут точки синхронизации барьера.

Пользователям, которым не требуется эта функциональность, можно использовать std::experimental::barrier .

Функции-члены

создает flex_barrier
(публичная функция-член)
уничтожает flex_barrier
(публичная функция-член)
operator=
[deleted]
не копируемый оператор присваивания
(публичная функция-член)
прибыть в точку синхронизации и заблокироваться
(публичная функция-член)
прибыть в точку синхронизации и удалить текущий поток из набора участвующих потоков
(публичная функция-член)