Язык

CyclicBarrier Класс

Определение

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

[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
Наследование
CyclicBarrier
Атрибуты

Комментарии

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера. Циклическиеbarriers полезны в программах с участием партии фиксированного размера потоков, которые иногда должны ждать друг друга. Барьер называется <эм>циклическим</em> , так как его можно повторно использовать после освобождения потоков ожидания.

Поддерживает CyclicBarrier необязательную Runnable команду, которая выполняется один раз на одну точку барьера после прибытия последнего потока в стороне, но до освобождения всех потоков. Это <действие> em<барьера или em> полезно для обновления общего состояния перед тем, как любая из сторон продолжится.

<B>Пример использования:</b> Ниже приведен пример использования барьера в параллельном декомпозиции:

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

Здесь каждый рабочий поток обрабатывает строку матрицы, а затем ожидает на барьере до тех пор, пока все строки не будут обработаны. Когда все строки обрабатываются предоставленным Runnable действием барьера, выполняется и объединяет строки. Если слияние определяет, что найдено решение, done() возвращается true , и каждый работник завершит работу.

Если действие барьера не зависит от сторон, приостановленных при его выполнении, то при освобождении любой из потоков в стороне может выполнить это действие. Чтобы упростить эту задачу, каждый вызов #await возвращает индекс прибытия этого потока на барьере. Затем можно выбрать, какой поток должен выполнить действие барьера, например:

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

Использует CyclicBarrier модель прерывания всех или нет для неудачных попыток синхронизации: если поток покидает точку барьера преждевременно из-за прерывания, сбоя или ожидания, все остальные потоки, ожидающие в этой точке барьера, также останутся ненормально через BrokenBarrierException (или InterruptedException если они слишком были прерваны примерно в то же время).

Эффекты согласованности памяти: действия в потоке перед вызовом await()<действий i happen-before>/i<>, которые являются частью действия барьера, которые, в свою очередь, происходят перед действиями после успешного возврата из соответствующих await() в других потоках.

Добавлено в версии 1.5.

Документация по Java для java.util.concurrent.CyclicBarrier.

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Конструкторы

Имя. Описание
CyclicBarrier(Int32, IRunnable)

Создает новый CyclicBarrier объект, который будет ходить, когда заданное число сторон (потоков) ожидает его, и которое будет выполнять заданное действие барьера, когда барьер споткнулся, выполненный последним потоком, входящим в барьер.

CyclicBarrier(Int32)

Создает новый CyclicBarrier объект, который будет действовать, когда заданное число сторон (потоков) ожидает его, и не выполняет предопределенное действие при споткнутом барьере.

CyclicBarrier(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

Имя. Описание
Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
IsBroken

Запросы, если этот барьер находится в неисправном состоянии.

JniIdentityHashCode

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

(Унаследовано от Object)
JniManagedPeerState

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
JniPeerMembers

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

NumberWaiting

Возвращает количество сторон, ожидающих в настоящее время на барьере.

Parties

Возвращает количество сторон, необходимых для поездки этого барьера.

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Имя. Описание
Await()

Ожидает, пока все #getParties стороны не вызвали await этот барьер.

Await(Int64, TimeUnit)

Ожидает, пока все #getParties стороны не вызвали await этот барьер или указанное время ожидания истекает.

AwaitAsync()

Асинхронно ожидает, пока все стороны не вызвали await этот барьер.

AwaitAsync(Int64, TimeUnit)

Асинхронно ожидает, пока все стороны не вызвали await этот барьер.

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
Dispose()

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
Dispose(Boolean)

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
DisposeUnlessReferenced()

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
Equals(Object)

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
JavaFinalize()
Устаревшие.

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
Notify()

Пробуждение одного потока, ожидающего монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
Reset()

Сбрасывает барьер до начального состояния.

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
ToArray<T>()

Создает управляемый массив из этого Java оболочки массива.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

(Унаследовано от Object)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>.

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

Имя. Описание
IJavaPeerable.Disposed()

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
IJavaPeerable.Finalized()

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

(Унаследовано от JavaObject)

Методы расширения

Имя. Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Помощь синхронизации, которая позволяет набору потоков ждать друг друга, чтобы достичь общей точки барьера.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к