Condividi tramite


CyclicBarrier Classe

Definizione

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

[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
Ereditarietà
CyclicBarrier
Attributi

Commenti

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune. I cicliciBarrier sono utili nei programmi che coinvolgono una parte fissa di thread che occasionalmente devono attendere l'uno per l'altro. La barriera viene chiamata <em>cyclic</em> perché può essere riutilizzata dopo il rilascio dei thread in attesa.

Un CyclicBarrier supporta un comando facoltativo Runnable che viene eseguito una volta per ogni punto di barriera, dopo l'arrivo dell'ultimo thread nella parte, ma prima del rilascio di qualsiasi thread. >Questa <azione</em> barriera è utile per aggiornare lo stato condiviso prima che una delle parti continui.

<b>Esempio di utilizzo:</b> Di seguito è riportato un esempio di utilizzo di una barriera in una struttura di scomposizione parallela:

{@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) { }
              }
            }}

In questo caso, ogni thread di lavoro elabora una riga della matrice, quindi attende alla barriera fino a quando non vengono elaborate tutte le righe. Quando tutte le righe vengono elaborate, l'azione barriera fornita Runnable viene eseguita e unisce le righe. Se la fusione determina che una soluzione è stata trovata, done() restituirà true e ogni ruolo di lavoro terminerà.

Se l'azione barriera non si basa sulle parti sospese quando viene eseguita, uno qualsiasi dei thread nella parte potrebbe eseguire tale azione quando viene rilasciata. Per facilitare questa operazione, ogni chiamata di #await restituisce l'indice di arrivo del thread in corrispondenza della barriera. È quindi possibile scegliere quale thread deve eseguire l'azione barriera, ad esempio:

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

CyclicBarrier usa un modello di interruzione all-or-none per i tentativi di sincronizzazione non riusciti: se un thread lascia un punto di barriera prematuramente a causa di interruzioni, errori o timeout, anche tutti gli altri thread in attesa in quel punto di barriera lasceranno anormale tramite BrokenBarrierException (o InterruptedException se sono stati interrotti allo stesso tempo).

Effetti di coerenza della memoria: azioni in un thread prima di chiamare await()<le>azioni i before</i> che fanno parte dell'azione barriera, che a sua volta si verificano prima delle azioni che seguono una restituzione corretta dall'oggetto corrispondente await() in altri thread.

Aggiunto nella versione 1.5.

Documentazione java per java.util.concurrent.CyclicBarrier.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Costruttori

CyclicBarrier(Int32)

Crea un nuovo CyclicBarrier oggetto che verrà eseguito quando il numero specificato di parti (thread) è in attesa e non esegue un'azione predefinita quando la barriera viene troncato.

CyclicBarrier(Int32, IRunnable)

Crea un nuovo CyclicBarrier oggetto che verrà eseguito quando il numero specificato di parti (thread) è in attesa su di esso e che eseguirà l'azione barriera specificata quando la barriera viene troncato, eseguita dall'ultimo thread che entra nella barriera.

CyclicBarrier(IntPtr, JniHandleOwnership)

Costruttore utilizzato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
IsBroken

Esegue una query se questa barriera si trova in uno stato interrotto.

JniIdentityHashCode

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
JniPeerMembers

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

NumberWaiting

Restituisce il numero di parti attualmente in attesa della barriera.

Parties

Restituisce il numero di parti necessarie per eseguire questa barriera.

PeerReference

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

Metodi

Await()

Attende che tutte le parti #getParties abbiano richiamato await su questa barriera.

Await(Int64, TimeUnit)

Attende che tutte le #getParties parti abbiano richiamato await su questa barriera o che il tempo di attesa specificato sia trascorso.

AwaitAsync()

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

AwaitAsync(Int64, TimeUnit)

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Dispose()

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
Dispose(Boolean)

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
Notify()

Riattiva un singolo thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitoraggio di questo oggetto.

(Ereditato da Object)
Reset()

Reimposta lo stato iniziale della barriera.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
ToArray<T>()

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una>notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
IJavaPeerable.Finalized()

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo verificato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

GetJniTypeName(IJavaPeerable)

Un aiuto di sincronizzazione che consente a un set di thread di attendere tra loro di raggiungere un punto di barriera comune.

Si applica a