Langage

CyclicBarrier Classe

Définition

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

[Android.Runtime.Register("java/util/concurrent/CyclicBarrier", DoNotGenerateAcw=true)]
public class CyclicBarrier : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/CyclicBarrier", DoNotGenerateAcw=true)>]
type CyclicBarrier = class
    inherit Object
Héritage
CyclicBarrier
Attributs

Remarques

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun. Les CycliqueBarriers sont utiles dans les programmes impliquant une partie fixe de threads qui doivent parfois attendre les uns les autres. La barrière est appelée <em>cyclique</em> , car elle peut être réutilisée après la libération des threads en attente.

A CyclicBarrier prend en charge une commande facultative Runnable qui est exécutée une fois par point de barrière, après l’arrivée du dernier thread dans la partie, mais avant la publication de tous les threads. Cette <action> de barrière em< est utile pour mettre à jour l’état partagé avant que l’une>des parties continue.

<b>Exemple d’utilisation :</b> Voici un exemple d’utilisation d’une barrière dans une conception de décomposition parallèle :

{@code
            class Solver {
              final int N;
              final float[][] data;
              final CyclicBarrier barrier;

              class Worker implements Runnable {
                int myRow;
                Worker(int row) { myRow = row; }
                public void run() {
                  while (!done()) {
                    processRow(myRow);

                    try {
                      barrier.await();
                    } catch (InterruptedException ex) {
                      return;
                    } catch (BrokenBarrierException ex) {
                      return;
                    }
                  }
                }
              }

              public Solver(float[][] matrix) {
                data = matrix;
                N = matrix.length;
                Runnable barrierAction = () -> mergeRows(...);
                barrier = new CyclicBarrier(N, barrierAction);

                List<Thread> threads = new ArrayList<>(N);
                for (int i = 0; i < N; i++) {
                  Thread thread = new Thread(new Worker(i));
                  threads.add(thread);
                  thread.start();
                }

                // wait until done
                for (Thread thread : threads)
                  try {
                    thread.join();
                  } catch (InterruptedException ex) { }
              }
            }}

Ici, chaque thread de travail traite une ligne de la matrice, puis attend à la barrière jusqu’à ce que toutes les lignes aient été traitées. Lorsque toutes les lignes sont traitées, l’action de barrière fournie Runnable est exécutée et fusionne les lignes. Si la fusion détermine qu’une solution a été trouvée, done() elle retourne true et chaque worker se termine.

Si l’action de barrière ne s’appuie pas sur les parties suspendues lorsqu’elle est exécutée, l’un des threads de la partie peut exécuter cette action lorsqu’elle est libérée. Pour faciliter cela, chaque appel de #await retourne l’index d’arrivée de ce thread à la barrière. Vous pouvez ensuite choisir quel thread doit exécuter l’action de barrière, par exemple :

{@code
            if (barrier.await() == 0) {
              // log the completion of this iteration
            }}

L’utilisation CyclicBarrier d’un modèle d’interruption tout ou aucun pour les tentatives de synchronisation ayant échoué : si un thread laisse un point de barrière prématurément en raison d’une interruption, d’un échec ou d’un délai d’attente, tous les autres threads en attente à ce point de barrière laissent également anormalement via BrokenBarrierException (ou InterruptedException s’ils ont également été interrompus en même temps).

Effets de cohérence de la mémoire : actions dans un thread avant l’appel await()<d’actions i>happen-before</i> qui font partie de l’action de barrière, qui à son tour se produisent avant les actions suivant un retour réussi du correspondant await() dans d’autres threads.

Ajouté à la version 1.5.

Documentation Java pour java.util.concurrent.CyclicBarrier.

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

Constructeurs

Nom Description
CyclicBarrier(Int32, IRunnable)

Crée un nouveau CyclicBarrier qui effectue un voyage lorsque le nombre donné de parties (threads) y attend, et qui exécute l’action de barrière donnée lorsque la barrière est trippée, effectuée par le dernier thread entrant dans la barrière.

CyclicBarrier(Int32)

Crée une nouvelle CyclicBarrier action qui effectue un voyage lorsque le nombre donné de parties (threads) est en attente, et n’effectue pas d’action prédéfinie lorsque la barrière est trippée.

CyclicBarrier(IntPtr, JniHandleOwnership)

Constructeur utilisé lors de la création de représentations managées d’objets JNI ; appelée par le runtime.

Propriétés

Nom Description
Class

Retourne la classe runtime de ce Object.

(Hérité de Object)
Handle

Handle de l’instance Android sous-jacente.

(Hérité de Object)
IsBroken

Interroge si cette barrière est dans un état rompu.

JniIdentityHashCode

Obtient le code de hachage d’identité affecté à cet homologue Java par le runtime d’interopérabilité.

(Hérité de Object)
JniManagedPeerState

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
JniPeerMembers

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

NumberWaiting

Retourne le nombre de parties qui attendent actuellement à la barrière.

Parties

Retourne le nombre de parties requises pour aller à cette barrière.

PeerReference

Obtient la référence d’objet JNI pour cet homologue Java.

(Hérité de Object)
ThresholdClass

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

ThresholdType

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

Méthodes

Nom Description
Await()

Attend que toutes les parties #getParties aient appelé await sur cette barrière.

Await(Int64, TimeUnit)

Attend que toutes les parties #getParties aient appelé await sur cette barrière, ou que le temps d’attente spécifié s’écoule.

AwaitAsync()

Attend de façon asynchrone jusqu’à ce que toutes les parties aient appelé await sur cette barrière.

AwaitAsync(Int64, TimeUnit)

Attend de façon asynchrone jusqu’à ce que toutes les parties aient appelé await sur cette barrière.

Clone()

Crée et retourne une copie de cet objet.

(Hérité de Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
Dispose()

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
Dispose(Boolean)

Libère les ressources détenues par cet homologue Java.

(Hérité de Object)
DisposeUnlessReferenced()

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
Equals(Object)

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
Equals(Object)

Indique si un autre objet est « égal à » celui-ci.

(Hérité de Object)
GetHashCode()

Retourne une valeur de code de hachage pour l’objet.

(Hérité de Object)
JavaFinalize()

Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet.

(Hérité de Object)
Notify()

Réveille un thread unique qui attend le moniteur de cet objet.

(Hérité de Object)
NotifyAll()

Réveille tous les threads qui attendent le moniteur de cet objet.

(Hérité de Object)
Reset()

Réinitialise la barrière à son état initial.

SetHandle(IntPtr, JniHandleOwnership)

Définit la propriété Handle.

(Hérité de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
ToArray<T>()

Crée un tableau managé à partir de ce wrapper de tableau Java.

(Hérité de Object)
ToString()

Retourne une représentation sous forme de chaîne de l’objet.

(Hérité de Object)
UnregisterFromRuntime()

Annule l’inscription de cet homologue Java à partir du runtime d’interopérabilité.

(Hérité de Object)
Wait()

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<>

(Hérité de Object)
Wait(Int64, Int32)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)
Wait(Int64)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti> par< em>ou <em>interrompu/em<,> ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
IJavaPeerable.Disposed()

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
IJavaPeerable.Finalized()

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

(Hérité de JavaObject)

Méthodes d’extension

Nom Description
GetJniTypeName(IJavaPeerable)

Obtient le nom JNI du type de l’instance self.

JavaAs<TResult>(IJavaPeerable)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

JavaCast<TResult>(IJavaObject)

Effectue une conversion de type vérifiée par le runtime Android.

JavaCast<TResult>(IJavaObject)

Aide de synchronisation qui permet à un ensemble de threads d’attendre l’un de l’autre pour atteindre un point de barrière commun.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

S’applique à