Pacchetto | flash.concurrent |
Classe | public final class Condition |
Ereditarietà | Condition Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Di seguito è riportato un possibile flusso di lavoro per l’uso di un oggetto Condition :
- Prima di usare un oggetto Condition, il primo worker deve assumere la titolarità del mutex associato tale oggetto chiamando il metodo
lock()
otryLock()
dell’oggetto Mutex. - Il codice del worker opera sulla risorsa condivisa finché una determinata condizione non diventa falsa, impedendo così al worker di continuare a utilizzare la risorsa condivisa. Ad esempio, se la risorsa condivisa è un set di dati da elaborare, quando i dati sono stati tutti elaborati il worker ha completato il proprio lavoro.
- A quel punto, chiamate il metodo
wait()
dell’oggetto Condition per mettere in pausa l’esecuzione del worker e rilasciare la titolarità del mutex. - A un determinato punto, un secondo assume la titolarità del mutex. Poiché il mutex è disponibile, il codice del secondo worker può operare in sicurezza sulla risorsa condivisa. Il secondo worker svolge quindi il lavoro necessario per soddisfare la condizione e consentire al primo worker di eseguire di nuovo il proprio lavoro. Ad esempio, se il primo worker non ha dati da elaborare, il secondo worker potrebbe passare altri dati da elaborare alla risorsa condivisa.
- A quel punto, la condizione associata al primo worker diventa vera (true) e pertanto il primo worker deve ricevere una notifica di tale circostanza. Per notificare il primo worker, il codice del secondo worker chiama il metodo
notify()
dell’oggetto Condition oppure il proprio metodonotifyAll()
. - Oltre a chiamare
notify()
, il secondo worker deve rilasciare la titolarità del mutex. Ciò avviene chiamando il metodounlock()
dell’oggetto Mutex oppure il metodowait()
dell’oggetto Condition. Poiché il primo worker ha chiamato il metodowait()
, la titolarità del mutex torna al primo worker. L’esecuzione del codice nel primo worker riprende quindi dalla riga di codice successiva alla chiamatawait()
.
La classe Condition è uno dei tipi di oggetti speciali che vengono condivisi dai worker anziché copiati tra loro. Quando passate una condizione da un worker a un altro chiamando il metodo setSharedProperty()
dell’oggetto Worker oppure utilizzando un oggetto MessageChannel, entrambi i worker hanno un riferimento allo stesso oggetto Condition nella memoria del runtime.
Elementi API correlati
Proprietà | Definito da | ||
---|---|---|---|
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
isSupported : Boolean [statico] [sola lettura]
Indica se la classe Condition è supportata per la piattaforma corrente. | Condition | ||
mutex : Mutex [sola lettura]
Il mutex associato a questa condizione. | Condition |
Metodo | Definito da | ||
---|---|---|---|
Crea una nuova istanza Condition. | Condition | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Specifica che la condizione rappresentata da questo oggetto Condition è stata soddisfatta e che la titolarità del mutex tornerà al worker successivo (se presente) che è in attesa di questa condizione. | Condition | ||
Specifica che la condizione rappresentata da questo oggetto Condition è stata soddisfatta e che la titolarità del mutex tornerà a tutti i worker che sono in attesa di questa condizione. | Condition | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Restituisce il valore di base dell'oggetto specificato. | Object | ||
Specifica che la condizione rappresentata da questo oggetto Condition non è stata soddisfatta, quindi il worker corrente deve attendere che venga soddisfatta prima di eseguire altro codice. | Condition |
isSupported | proprietà |
isSupported:Boolean
[sola lettura] Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Indica se la classe Condition è supportata per la piattaforma corrente.
Nota: se la classe Mutex non è supportata, la creazione di un’istanza Condition non è possibile e questa proprietà è false
.
Implementazione
public static function get isSupported():Boolean
mutex | proprietà |
Condition | () | Funzione di costruzione |
notify | () | metodo |
public function notify():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Specifica che la condizione rappresentata da questo oggetto Condition è stata soddisfatta e che la titolarità del mutex tornerà al worker successivo (se presente) che è in attesa di questa condizione.
La chiamata di questo metodo non rilascia automaticamente la titolarità del mutex. Dopo aver chiamato notify()
, dove rilasciare esplicitamente la titolarità del mutex in uno dei due modi seguenti: chiamando il metodo Mutex.unlock()
se il worker corrente non necessita più del mutex, oppure chiamando wait()
se il worker deve riassumere la titolarità del mutex dopo che altri worker hanno completato il proprio lavoro.
Una volta rilasciato il blocco del mutex, il worker successivo nella coda di worker che hanno chiamato il metodo wait()
acquisisce il mutex e riprende l’esecuzione del codice.
Genera
IllegalOperationError — se il worker corrente non è titolare del mutex di questa condizione
|
notifyAll | () | metodo |
public function notifyAll():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Specifica che la condizione rappresentata da questo oggetto Condition è stata soddisfatta e che la titolarità del mutex tornerà a tutti i worker che sono in attesa di questa condizione.
La chiamata di questo metodo non rilascia automaticamente la titolarità del mutex. Dopo aver chiamato notify()
, dove rilasciare esplicitamente la titolarità del mutex in uno dei due modi seguenti: chiamando il metodo Mutex.unlock()
se il worker corrente non necessita più del mutex, oppure chiamando wait()
se il worker deve riassumere la titolarità del mutex dopo che altri worker hanno completato il proprio lavoro.
Una volta rilasciato il blocco del mutex, i worker in attesa ricevono la titolarità uno alla volta nell’ordine in cui hanno chiamato il metodo wait()
. Ogni worker che ha chiamato il metodo wait()
acquisisce il mutex a turno e riprende l’esecuzione del codice. Quando il worker chiama il metodo Mutex.unlock()
o wait()
, la titolarità del mutex passa al worker successivo in attesa. Ogni volta che la titolarità del mutex passa da un worker a un altro, la transizione viene eseguita come singola operazione atomica.
Genera
IllegalOperationError — se il worker corrente non è titolare del mutex di questa condizione
|
wait | () | metodo |
public function wait(timeout:Number = -1):Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Specifica che la condizione rappresentata da questo oggetto Condition non è stata soddisfatta, quindi il worker corrente deve attendere che venga soddisfatta prima di eseguire altro codice. La chiamata di questo metodo mette in pausa il thread di esecuzione del worker corrente e rilascia la titolarità del mutex della condizione. Questi passaggi vengono eseguiti come unica operazione atomica. Il worker rimane in pausa finché un altro worker non chiama il metodo notify()
o notifyAll()
di questo oggetto Condition.
Parametri
timeout:Number (default = -1 ) — La durata massima, in millisecondi, per la quale il worker deve mettere in pausa l’esecuzione prima di continuare. Se questo valore è -1 (valore predefinito), non è previsto alcun limite di timeout e la sospensione dell’esecuzione ha una durata indefinita.
|
Boolean — true se il limite di timeout è scaduto. Altrimenti il metodo restituisce false .
|
Genera
IllegalOperationError — se il worker corrente non è titolare del mutex di questa condizione
| |
ArgumentError — se l’argomento timeout è minore di 0 e non -1
| |
ScriptTimeoutError — Se il metodo viene chiamato dal codice nel worker primordiale in Flash Player e il worker rimane in pausa per un tempo più lungo del limite di timeout dell script (durata predefinita 15 secondi).
| |
Error — se il metodo viene chiamato e, mentre l’esecuzione del worker chiamante è in pausa, il worker in attesa viene terminato.
|
Tue Jun 12 2018, 02:44 PM Z