Partager via


Fonction EnterSynchronizationBarrier (synchapi.h)

Fait attendre le thread appelant au niveau d’une barrière de synchronisation jusqu’à ce que le nombre maximal de threads soit entré dans la barrière.

Syntaxe

BOOL EnterSynchronizationBarrier(
  [in, out] LPSYNCHRONIZATION_BARRIER lpBarrier,
  [in]      DWORD                     dwFlags
);

Paramètres

[in, out] lpBarrier

Pointeur vers une barrière de synchronisation initialisée. Utilisez la fonction InitializeSynchronizationBarrier pour initialiser la barrière. SYNCHRONIZATION_BARRIER est une structure opaque qui ne doit pas être modifiée par l’application.

[in] dwFlags

Indicateurs qui contrôlent le comportement des threads qui entrent dans cette barrière. Ce paramètre peut être une ou plusieurs des valeurs suivantes :

Valeur Signification
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY Spécifie que le thread entrant dans la barrière doit se bloquer immédiatement jusqu’à ce que le dernier thread entre dans la barrière. Pour plus d'informations, consultez la section Notes.
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY Spécifie que le thread entrant dans la barrière doit tourner jusqu’à ce que le dernier thread entre dans la barrière, même si le thread tournant dépasse le nombre maximal de spins de la barrière. Pour plus d'informations, consultez la section Notes.
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE Spécifie que la fonction peut ignorer le travail requis pour s’assurer qu’il est sûr de supprimer la barrière, ce qui peut améliorer les performances. Tous les threads qui entrent dans cette barrière doivent spécifier l’indicateur ; sinon, l’indicateur est ignoré. Cet indicateur ne doit être utilisé que si la barrière ne sera jamais supprimée.

Valeur retournée

TRUE pour le dernier thread signalant la barrière. Les threads qui signalent la barrière avant le dernier signal de thread reçoivent une valeur de retour de FALSE.

Remarques

Le comportement par défaut pour les threads qui entrent dans une barrière de synchronisation consiste à faire tourner jusqu’à ce que le nombre maximal de tours de la barrière soit atteint, puis à bloquer. Cela permet aux threads de reprendre rapidement si le dernier thread entre dans la barrière dans un délai relativement court. Toutefois, si le dernier thread prend relativement plus de temps à arriver, les threads déjà présents dans le bloc de barrière de sorte qu’ils cessent de consommer du temps processeur pendant l’attente.

Un thread peut remplacer le comportement par défaut de la barrière en spécifiant SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY ou SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY. Toutefois, gardez à l’esprit que l’utilisation de ces indicateurs peut affecter les performances. La rotation indéfinie empêche un processeur de traiter d’autres threads, tandis qu’un blocage prématuré entraîne la surcharge liée à l’échange du thread hors du processeur, au réveil du thread lorsqu’il se débloque et à son retour sur le processeur. En général, il est préférable d’autoriser la barrière à gérer les threads et à utiliser ces indicateurs uniquement si les tests de performances indiquent que l’application en tirerait parti.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau uniquement]
Plateforme cible Windows
En-tête synchapi.h
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

DeleteSynchronizationBarrier

InitializeSynchronizationBarrier

Barrières de synchronisation

API Vertdll disponibles dans les enclaves VBS