CyclicBarrier Clase

Definición

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

[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
Herencia
CyclicBarrier
Atributos

Comentarios

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común. Los cíclicosBarriers son útiles en programas que implican una parte fija de subprocesos que ocasionalmente deben esperar entre sí. La barrera se denomina <em>cíclica</em> porque se puede volver a usar después de liberar los subprocesos en espera.

Admite CyclicBarrier un comando opcional Runnable que se ejecuta una vez por punto de barrera, después de que llegue el último subproceso de la entidad, pero antes de que se liberen los subprocesos. Esta <acción>< de barrera em>es útil para actualizar el estado compartido antes de que cualquiera de las partes continúe.

<b>Uso de ejemplo:</b> Este es un ejemplo de uso de una barrera en un diseño de descomposición paralela:

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

Aquí, cada subproceso de trabajo procesa una fila de la matriz y, a continuación, espera a la barrera hasta que se hayan procesado todas las filas. Cuando se procesan todas las filas, se ejecuta la acción de barrera proporcionada Runnable y combina las filas. Si la fusión determina que se ha encontrado una solución, done() se devolverá true y cada trabajador finalizará.

Si la acción de barrera no se basa en las partes que se suspenden cuando se ejecuta, cualquiera de los subprocesos de la entidad podría ejecutar esa acción cuando se libera. Para facilitar esto, cada invocación de devuelve el índice de #await llegada de ese subproceso en la barrera. A continuación, puede elegir qué subproceso debe ejecutar la acción de barrera, por ejemplo:

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

CyclicBarrier usa un modelo de interrupción de todos o ninguno para los intentos de sincronización con errores: si un subproceso deja un punto de barrera prematuramente debido a la interrupción, error o tiempo de espera, todos los demás subprocesos que esperan en ese punto de barrera también se quedarán anómalos a través BrokenBarrierException de (o InterruptedException si también se interrumpieron al mismo tiempo).

Efectos de coherencia de memoria: las acciones de un subproceso antes de llamar a await()<acciones i>happen-before</i> que forman parte de la acción de barrera, que a su vez se producen antes de que las acciones después de una devolución correcta de la correspondiente await() en otros subprocesos.

Agregado en 1.5.

Documentación de Java para java.util.concurrent.CyclicBarrier.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.

Constructores

Nombre Description
CyclicBarrier(Int32, IRunnable)

Crea un nuevo CyclicBarrier que viajará cuando el número determinado de partes (subprocesos) esté esperando, y que ejecutará la acción de barrera dada cuando se tripe la barrera, realizada por el último subproceso que entra en la barrera.

CyclicBarrier(Int32)

Crea un nuevo CyclicBarrier que se triplicará cuando el número determinado de partes (subprocesos) esté esperando y no realice una acción predefinida cuando se triplica la barrera.

CyclicBarrier(IntPtr, JniHandleOwnership)

Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución.

Propiedades

Nombre Description
Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
IsBroken

Consulta si esta barrera está en estado roto.

JniIdentityHashCode

Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad.

(Heredado de Object)
JniManagedPeerState

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
JniPeerMembers

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

NumberWaiting

Devuelve el número de partes que esperan actualmente en la barrera.

Parties

Devuelve el número de partes necesarias para viajar por esta barrera.

PeerReference

Obtiene la referencia de objeto JNI para este Java del mismo nivel.

(Heredado de Object)
ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

Métodos

Nombre Description
Await()

Espera hasta que todas las partes #getParties hayan invocado await en esta barrera.

Await(Int64, TimeUnit)

Espera hasta que todas las partes de #getParties hayan invocado await en esta barrera o el tiempo de espera especificado transcurre.

AwaitAsync()

Espera asincrónicamente hasta que todas las partes hayan invocado await en esta barrera.

AwaitAsync(Int64, TimeUnit)

Espera asincrónicamente hasta que todas las partes hayan invocado await en esta barrera.

Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
Dispose()

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
Dispose(Boolean)

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
DisposeUnlessReferenced()

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
Equals(Object)

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
GetHashCode()

Devuelve un valor de código hash para el objeto .

(Heredado de Object)
JavaFinalize()

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
Reset()

Restablece la barrera a su estado inicial.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
ToArray<T>()

Crea una matriz administrada a partir de este contenedor de matriz Java.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto .

(Heredado de Object)
UnregisterFromRuntime()

Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><>

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)

Implementaciones de interfaz explícitas

Nombre Description
IJavaPeerable.Disposed()

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
IJavaPeerable.Finalized()

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

(Heredado de JavaObject)

Métodos de extensión

Nombre Description
GetJniTypeName(IJavaPeerable)

Obtiene el nombre JNI del tipo de la instancia self.

JavaAs<TResult>(IJavaPeerable)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

Ayuda de sincronización que permite a un conjunto de subprocesos esperar entre sí para alcanzar un punto de barrera común.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

Se aplica a