Pacchetto | flash.concurrent |
Classe | public final class Mutex |
Ereditarietà | Mutex Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
shareable
è true
). Tuttavia, un Mutex può essere utilizzato per gestire l’accesso dei worker a qualsiasi risorsa condivisa, ad esempio un’estensione AIR nativa o un file del file system. Indipendentemente dal tipo di risorsa, lo scopo del mutex è quello di assicurare che un solo set of codice alla volta possa accedere alla risorsa.
Un mutex gestisce l’accesso utilizzando il concetto di "titolarità della risorsa". In qualsiasi momento, un solo worker può essere "titolare" di un determinato mutex. Quando la titolarità di un mutex passa da un worker a un altro, la transizione è di tipo atomico. In questo modo viene garantito che non sia mai possibile che più di un worker assuma la titolarità del mutex. Fintanto che il codice di un worker opera unicamente su una risorsa condivisa quando tale worker è titolare del mutex, si può essere sicuri che non si verifichi mail alcun conflitto tra worker diversi.
Utilizzate il metodo tryLock()
per assumere la titolarità del mutex se è disponibile. Utilizzate il metodo lock()
per mettere in pausa l’esecuzione del worker corrente finché il mutex non è disponibile e quindi, a quel punto, assumerne la titolarità. Una volta che il worker corrente ha assunto la titolarità del mutex, esso può operare in sicurezza sulla risorsa condivisa. Quando le operazioni sono complete, chiamate il metodo unlock()
per rilasciare il mutex. A quel punto, il worker corrente non deve più accedere alla risorsa condivisa.
La classe Mutex è uno dei tipi di oggetti speciali che vengono condivisi dai worker anziché copiati tra loro. Quando passate un mutex 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 Mutex nella memoria del runtime.
Elementi API correlati
Metodo | Definito da | ||
---|---|---|---|
Mutex()
Crea una nuova istanza Mutex. | Mutex | ||
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 | ||
Mette in pausa l’esecuzione del worker corrente finché il mutex non è disponibile, quindi assume la titolarità del mutex. | Mutex | ||
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 | ||
Assume la titolarità del mutex se è disponibile. | Mutex | ||
Rilascia la titolarità di questo mutex, consentendo a qualsiasi worker di acquisirlo e di eseguire il proprio codice sulla risorsa associata. | Mutex | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
Mutex | () | Funzione di costruzione |
public function Mutex()
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Crea una nuova istanza Mutex.
Genera
Error — se l’istanza mutex non può essere inizializzata.
|
lock | () | metodo |
public function lock():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Mette in pausa l’esecuzione del worker corrente finché il mutex non è disponibile, quindi assume la titolarità del mutex. Se un altro worker è titolare del mutex quando viene chiamato lock()
, il thread di esecuzione del worker chiamante viene sospeso in corrispondenza della chiamata lock()
e il worker viene aggiunto alla coda delle richieste di titolarità. Quando il worker chiamante acquisisce il mutex, l’esecuzione del worker riprende dalla riga di codice successiva alla chiamata lock()
.
Una volta che il worker corrente ha assunto la titolarità del mutex, esso può operare in sicurezza sulla risorsa condivisa. Quando le operazioni sono complete, chiamate il metodo unlock()
per rilasciare il mutex. A quel punto, il worker corrente non deve più accedere alla risorsa condivisa.
Internamente, un mutex tiene conto del numero di richieste di blocco che ha ricevuto. Il mutex deve ricevere lo stesso numero di richieste di sblocco per poter essere rilasciato completamente. Se il codice del worker che è titolare del mutex viene bloccato di nuovo (mediante una chiamata al metodo lock()
), il conteggio interno dei blocchi viene incrementato di un’unità. Per rilasciare la titolarità del mutex, dovete chiamare il metodo unlock()
per un numero di volte corrispondente a quello delle richieste di blocco.
Quando più worker sono in attesa di un mutex, per assegnare la titolarità il mutex dà la priorità al worker che è in attesa da più tempo. Tuttavia, la programmazione dei thread dei worker viene gestita dal sistema operativo host, quindi non è possibile garantire un particolare ordine di esecuzione del codice tra i worker.
tryLock | () | metodo |
public function tryLock():Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Assume la titolarità del mutex se è disponibile. Se un altro worker è già titolare del mutex oppure un altro worker ha chiamato il metodo lock()
ed è in attesa di acquisire il mutex, quest’ultimo non è disponibile. In questo caso, la chiamata di questo metodo restituisce false
e l’esecuzione del codice riprende immediatamente.
Una volta che il worker corrente ha assunto la titolarità del mutex, esso può operare in sicurezza sulla risorsa condivisa. Quando le operazioni sono complete, chiamate il metodo unlock()
per rilasciare il mutex. A quel punto, il worker corrente non deve più accedere alla risorsa condivisa.
Quando più worker sono in attesa di un mutex, per assegnare la titolarità il mutex dà la priorità al worker che è in attesa da più tempo. Tuttavia, la programmazione dei thread dei worker viene gestita dal sistema operativo host, quindi non è possibile garantire un particolare ordine di esecuzione del codice tra i worker.
RestituisceBoolean — true se il mutex era disponibile (e il worker corrente ne è ora la titolare) oppure false se il worker corrente non ha acquisito la titolarità del mutex.
|
unlock | () | metodo |
public function unlock():void
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 11.5, AIR 3.5 |
Rilascia la titolarità di questo mutex, consentendo a qualsiasi worker di acquisirlo e di eseguire il proprio codice sulla risorsa associata.
Internamente, un mutex tiene conto del numero di richieste di blocco che ha ricevuto. Per rilasciare la titolarità del mutex, il codice di un worker deve chiamare il metodo unlock()
per un numero di volte corrispondente a quello delle richieste di blocco.
Genera
IllegalOperationError — se il worker corrente non è titolare del mutex.
|
Tue Jun 12 2018, 02:44 PM Z