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 |