std::experimental::flex_barrier:: arrive_and_wait
|
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) |