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
- Наследование
- Атрибуты
Комментарии
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. CyclicBarriers полезны в программах, использующих партию потоков фиксированного размера, которые иногда должны ждать друг друга. Барьер называется <em>cyclic</em> , так как его можно повторно использовать после освобождения ожидающих потоков.
Поддерживает CyclicBarrier
необязательную Runnable
команду, которая выполняется один раз для каждой точки барьера после поступления последнего потока в стороне, но до освобождения потоков. Это <действие< барьера> 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 происходят до</i>, которые являются частью действия барьера, которые, в свою очередь, выполняются перед действиями после успешного возврата из соответствующего await()
в других потоках.
Добавлено в версии 1.5.
Документация по Java для java.util.concurrent.CyclicBarrier
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.
Конструкторы
CyclicBarrier(Int32) |
Создает новый |
CyclicBarrier(Int32, IRunnable) |
Создает новый |
CyclicBarrier(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
Class |
Возвращает класс среды выполнения данного объекта |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
IsBroken |
Запрашивает, находится ли этот барьер в неисправном состоянии. |
JniIdentityHashCode |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
JniPeerMembers |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. |
NumberWaiting |
Возвращает количество сторон, ожидающих в настоящее время на барьере. |
Parties |
Возвращает количество сторон, необходимых для этого барьера. |
PeerReference |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
Await() |
Ожидает, пока все #getParties стороны не вызовуют |
Await(Int64, TimeUnit) |
Ожидает, пока все #getParties стороны не вызовет |
AwaitAsync() |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. |
AwaitAsync(Int64, TimeUnit) |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. |
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
Dispose() |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
Dispose(Boolean) |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
Equals(Object) |
Указывает, равен ли какой-то другой объект этому объекту. (Унаследовано от Object) |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
JavaFinalize() |
Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект . (Унаследовано от Object) |
Notify() |
Пробуждает один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
NotifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. (Унаследовано от Object) |
Reset() |
Сбрасывает барьер в исходное состояние. |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
ToArray<T>() |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
UnregisterFromRuntime() |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
Wait() |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.>< (Унаследовано от Object) |
Wait(Int64) |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
IJavaPeerable.Finalized() |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
IJavaPeerable.JniManagedPeerState |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. (Унаследовано от Object) |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверенного средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. |
GetJniTypeName(IJavaPeerable) |
Средство синхронизации, позволяющее набору потоков ждать друг друга, чтобы достичь общей точки барьера. |