pthread_barrier_destroy ou pthread_barrier_init Sous-routine

Objectif

Détruit ou initialise un objet barrière.

Syntaxe

#include <pthread.h>

int pthread_barrier_destroy(pthread_barrier_t *barrier);
int pthread_barrier_init(pthread_barrier_t *restrict barrier,
       const pthread_barrierattr_t *restrict attr, unsigned count); 

Descriptif

La sous-routine pthread_barrier_destroy détruit la barrière référencée par le paramètre barrière et libère toutes les ressources utilisées par la barrière. L'effet de l'utilisation ultérieure de la barrière n'est pas défini jusqu'à ce que la barrière soit réinitialisée par un autre appel à la sous-routine pthread_barrier_init . Une implémentation peut utiliser cette sous-routine pour définir le paramètre barrière sur une valeur non valide. Les résultats sont indéfinis si la sous-routine pthread_barrier_destroy est appelée lorsqu'une unité d'exécution est bloquée sur la barrière ou si cette fonction est appelée avec une barrière non initialisée.

La sous-routine pthread_barrier_init alloue les ressources requises pour utiliser la barrière référencée par le paramètre barrière et initialise la barrière avec les attributs référencés par le paramètre attr . Si le paramètre attr est NULL, les attributs de barrière par défaut sont utilisés ; l'effet est identique à la transmission de l'adresse d'un objet d'attributs de barrière par défaut. Les résultats ne sont pas définis si la sous-routine pthread_barrier_init est appelée lorsqu'une unité d'exécution est bloquée sur la barrière (c'est-à-dire qu'elle n'a pas été renvoyée par l'appel pthread_barrier_wait ). Les résultats ne sont pas définis si une barrière est utilisée sans être initialisée au préalable. Les résultats ne sont pas définis si la sous-routine pthread_barrier_init est appelée en spécifiant une barrière déjà initialisée.

L'argument count indique le nombre d'unités d'exécution qui doivent appeler la sous-routine pthread_barrier_wait avant que l'une d'entre elles ne soit renvoyée avec succès à partir de l'appel. La valeur spécifiée par le paramètre count doit être supérieure à zéro.

Si la sous-routine pthread_barrier_init échoue, la barrière n'est pas initialisée et le contenu de la barrière n'est pas défini.

Seul l'objet référencé par le paramètre barrière peut être utilisé pour effectuer la synchronisation. Le résultat de la référence à des copies de cet objet dans des appels à la sous-routine pthread_barrier_destroy ou pthread_barrier_wait n'est pas défini.

Valeurs renvoyées

Une fois terminées, ces fonctions doivent renvoyer zéro ; dans le cas contraire, un numéro d'erreur doit être renvoyé pour indiquer l'erreur.

Codes d'erreur

La sous-routine pthread_barrier_destroy peut échouer si:
Article Descriptif
EBUSY L'implémentation a détecté une tentative de destruction d'une barrière lors de son utilisation (par exemple, lors de son utilisation dans un appel pthread_barrier_wait ) par une autre unité d'exécution.
EINVAL La valeur spécifiée par la barrière n'est pas valide.
La fonction pthread_barrier_init () échouera si:
Article Descriptif
FEAGA Le système ne dispose pas des ressources nécessaires pour initialiser une autre barrière.
EINVAL La valeur spécifiée par le paramètre count est égale à zéro.
ENOMEM La mémoire est insuffisante pour initialiser la barrière.
La sous-routine pthread_barrier_init peut échouer si:
Article Descriptif
EBUSY L'implémentation a détecté une tentative de réinitialisation d'une barrière alors qu'elle est en cours d'utilisation (par exemple, lorsqu'elle est utilisée dans un appel pthread_barrier_wait ) par une autre unité d'exécution.
EINVAL La valeur spécifiée par le paramètre attr n'est pas valide.