Функция EnterSynchronizationBarrier (synchapi.h)
Вызывает ожидание вызывающего потока на барьере синхронизации до тех пор, пока максимальное число потоков не войдет в барьер.
Синтаксис
BOOL EnterSynchronizationBarrier(
[in, out] LPSYNCHRONIZATION_BARRIER lpBarrier,
[in] DWORD dwFlags
);
Параметры
[in, out] lpBarrier
Указатель на инициализированный барьер синхронизации. Используйте функцию InitializeSynchronizationBarrier для инициализации барьера. SYNCHRONIZATION_BARRIER — это непрозрачная структура, которую приложение не должно изменять.
[in] dwFlags
Флаги, управляющие поведением потоков, которые входят в этот барьер. Этот параметр может иметь одно или несколько из следующих значений:
Значение | Значение |
---|---|
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY | Указывает, что поток, входящий в барьер, должен блокироваться немедленно, пока последний поток не войдет в барьер. Дополнительные сведения см. в подразделе "Примечания". |
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY | Указывает, что поток, входящий в барьер, должен вращаться до тех пор, пока последний поток не войдет в барьер, даже если вращающееся поток превышает максимальное число спинов барьера. Дополнительные сведения см. в подразделе "Примечания". |
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE | Указывает, что функция может пропустить работу, необходимую для безопасного удаления барьера, что может повысить производительность. Все потоки, которые входят в этот барьер, должны указывать флаг ; В противном случае флаг игнорируется. Этот флаг следует использовать только в том случае, если барьер никогда не будет удален. |
Возвращаемое значение
TRUE
для последнего потока, сигнального барьеру. Потоки, которые сигнализируют о барьере до того, как последний поток сообщает о получении возвращаемого FALSE
значения .
Комментарии
Поведение по умолчанию для потоков, входящих в барьер синхронизации, заключается в том, чтобы вращать, пока не будет достигнуто максимальное число спинов барьера, а затем блокировать. Это позволяет потокам быстро возобновить работу, если последний поток войдет в барьер за относительно короткое время. Однако если последний поток занимает относительно больше времени, потоки уже находятся в блоке барьера, поэтому они перестают потреблять время процессора во время ожидания.
Поток может переопределить поведение барьера по умолчанию, указав SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY или SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY. Однако помните, что использование этих флагов может повлиять на производительность. Вращение на неопределенный срок не позволяет процессору обслуживать другие потоки, в то время как преждевременная блокировка влечет за собой дополнительные расходы на переключение потока с процессора, пробуждение потока при разблокировке и его повторное переключение на процессор. Как правило, лучше разрешить барьер для управления потоками и использовать эти флаги только в том случае, если тестирование производительности показывает, что приложение выиграет от них.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | synchapi.h |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |