Namespaces
Variants

std::experimental::flex_barrier:: arrive_and_wait

From cppreference.net
void arrive_and_wait ( ) ;
(TS параллелизма)

Блокируется и прибывает в точку синхронизации flex_barrier .

Поведение не определено, если вызывающий поток не входит в набор участвующих потоков данного flex_barrier .

Вызовы arrive_and_wait синхронизируются с началом фазы завершения flex_barrier . Завершение фазы завершения синхронизируется с возвратом из вызова.

Вызовы arrive_and_drop и arrive_and_wait никогда не приводят к состоянию гонки данных между собой или друг с другом.

Примечания

Безопасно для потока вызывать либо arrive_and_wait() , либо arrive_and_drop() сразу после возврата из этого вызова (при условии, что функциональный объект для фазы завершения не вернул ноль). Не требуется обеспечивать, чтобы все заблокированные потоки вышли из arrive_and_wait() перед тем, как поток вызовет его снова.

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

Начальный набор участвующих потоков для flex_barrier , созданного для num_threads потоков, представляет собой первые num_threads , прибывающие к его точке синхронизации.

Исключения

Ничего не выбрасывает.

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

прибыть в точку синхронизации и удалить текущий поток из набора участвующих потоков
(public member function)