CyclicBarrier Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
- 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(Int32) |
Crée une nouvelle |
| 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 |
| 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(Int64, TimeUnit) |
Attend que toutes les parties #getParties aient appelé |
| AwaitAsync() |
Attend de façon asynchrone jusqu’à ce que toutes les parties aient appelé |
| AwaitAsync(Int64, TimeUnit) |
Attend de façon asynchrone jusqu’à ce que toutes les parties aient appelé |
| 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 |
| JavaAs<TResult>(IJavaPeerable) |
Essayez de forcer |
| 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 |