Pacote | flash.concurrent |
Classe | public final class Condition |
Herança | Condition Object |
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
O seguinte é um fluxo de trabalho possível para usar o objeto Condition:
- Antes de usar um objeto Condition, o primeiro worker deve obter a propriedade da mutex associada da condição ao chamar os métodos
lock()
outryLock()
do objeto Mutex. - O código do worker funciona com o recurso compartilhado até que alguma condição se torne falsa, o que evita que worker trabalhe mais com o recursos compartilhado. Por exemplo, se o recursos compartilhado for um conjunto de dados a serem processados, quando não houver mais dados a serem processadas o worker não pode trabalhar mais.
- Nesse momento, chame o método
wait()
do objeto Condition para pausar a execução do worker e liberar a propriedade da mutex. - Em algum momento, um segundo worker toma a propriedade da mutex. Como a mutex está disponível, é seguro operar o código do segundo worker no recurso compartilhado. O segundo worker faz o que for necessário para atender a condição, para que o primeiro worker possa fazer seu trabalho novamente. Por exemplo, se o primeiro worker não tiver dados a serem processados, o segundo worker pode passar mais dados a serem processados para o recursos compartilhado.
- Nesse momento, a condição relacionada ao trabalho do primeiro worker é verdadeira, então o primeiro worker precisa ser notificado que a condição foi cumprida. Para notificar o primeiro worker, o código do segundo worker chama o método
notify()
do objeto de condição ou seu métodonotifyAll()
. - Além de chamar
notify()
, o segundo worker precisa liberar a propriedade da mutex. Ele faz isso chamando o métodounlock()
do objeto Mutex ou o métodowait()
do objeto Condition. Como o primeiro worker chamou o métodowait()
, a propriedade da mutex retorna ao primeiro worker. A execução de código no primeiro worker continua novamente com a próxima linha do código seguindo a chamadawait()
.
A classe Condition é um dos tipos de objeto especial compartilhado entre os workers, em vez de copiados entre eles. Quando você passa uma condição de um worker a outro efetuando uma chamada ao método setSharedProperty()
do objeto do Worker ou usando um canal MessageChannel, ambos os workers têm referência ao mesmo objeto Condition na memória do runtime.
Elementos da API relacionados
Propriedade | Definido por | ||
---|---|---|---|
constructor : Object
Uma referência ao objeto de classe ou à função de construtor de uma determinada ocorrência de objeto. | Object | ||
isSupported : Boolean [estático] [somente leitura]
Indica se a classe Condition é suportada na plataforma atual. | Condition | ||
mutex : Mutex [somente leitura]
A mutex associado a esta condição. | Condition |
Método | Definido por | ||
---|---|---|---|
Cria uma nova ocorrência Condition. | Condition | ||
Indica se um objeto tem uma propriedade especificada definida. | Object | ||
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. | Object | ||
Especifica que a condição que esse objeto Condition representa foi atendida e que a propriedade da mutex será retornada ao worker seguinte (se houver) que está aguardando essa condição. | Condition | ||
Especifica que a condição que esse objeto Condition representa foi atendida e que a propriedade da mutex será retornada a todos os workers que estão aguardando essa condição. | Condition | ||
Indica se a propriedade especificada existe e é enumerável. | Object | ||
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. | Object | ||
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade. | Object | ||
Retorna a representação de string do objeto especificado. | Object | ||
Retorna o valor primitivo do objeto especificado. | Object | ||
Especifica que a condição que esse objeto Condition representa não é atendida e que o worker atual precisa aguardar até que seja atendida, antes de executar mais códigos. | Condition |
isSupported | propriedade |
isSupported:Boolean
[somente leitura] Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
Indica se a classe Condition é suportada na plataforma atual.
Observação: se a classe Mutex não for suportada, a criação de uma ocorrência Condition não é possível e essa propriedade é false
.
Implementação
public static function get isSupported():Boolean
mutex | propriedade |
Condition | () | Construtor |
notify | () | método |
public function notify():void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
Especifica que a condição que esse objeto Condition representa foi atendida e que a propriedade da mutex será retornada ao worker seguinte (se houver) que está aguardando essa condição.
Chamar esse método não libera automaticamente a propriedade da mutex. Depois de chamar notify()
, libere explicitamente a propriedade da mutex em uma das duas maneiras a seguir: chamar o método Mutex.unlock()
se o worker atual não precisar da mutex novamente ou chamarwait()
se o worker precisar obter a propriedade do mutex novamente após outros workers completarem seus trabalhos.
Um dos bloqueios de mutex é liberado, o worker seguinte na fila de workers que chamaram o método wait()
adquire a mutex e retoma a execução de código.
Lança
IllegalOperationError — se o worker atual não tem a mutex desta condição
|
notifyAll | () | método |
public function notifyAll():void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
Especifica que a condição que esse objeto Condition representa foi atendida e que a propriedade da mutex será retornada a todos os workers que estão aguardando essa condição.
Chamar esse método não libera automaticamente a propriedade da mutex. Depois de chamar notify()
, libere explicitamente a propriedade da mutex em uma das duas maneiras a seguir: chamar o método Mutex.unlock()
se o worker atual não precisar da mutex novamente ou chamarwait()
se o worker precisar obter a propriedade do mutex novamente após outros workers completarem seus trabalhos.
Quando o bloqueio da mutex estiver liberado, os workers em aguardo recebem a propriedade, um de cada vez, na ordem em que são chamados no método wait()
. Cada worker que foi chamado no método wait()
adquire a mutex por vez e continua retoma a execução de código. Quando o worker chama o método Mutex.unlock()
ou o método wait()
, a propriedade da mutex alterna para o próximo worker em aguardo. Cada vez que a propriedade da mutex alterna entre workers, a transição é executada como uma operação atômica única.
Lança
IllegalOperationError — se o worker atual não tem a mutex desta condição
|
wait | () | método |
public function wait(timeout:Number = -1):Boolean
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
Especifica que a condição que esse objeto Condition representa não é atendida e que o worker atual precisa aguardar até que seja atendida, antes de executar mais códigos. Chamar esse método pausa a execução do worker atual e libera a propriedade da mutex da condição. Essas etapas são realizadas como uma operação atômica única. O worker continua pausado até que outro worker chame os métodos notify()
ou notifyAll()
desse objeto Condition.
Parâmetros
timeout:Number (default = -1 ) — a quantidade máxima de tempo, em milissegundos, que o worker deve pausar a execução antes de continuar. Se esse valor for -1 (o padrão) não há tempo limite e a execução é pausada indefinidamente.
|
Boolean — true se o método foi retornado porque o tempo limite foi esgotado. Do contrário, o método retorna false .
|
Lança
IllegalOperationError — se o worker atual não tem a mutex desta condição
| |
ArgumentError — se o argumento timeout for menor que 0 e não for -1
| |
ScriptTimeoutError — se o método for chamado a partir do código no worker primário no Flash Player e o worker pausar por mais tempo que o limite de tempo do script (15 segundos por padrão)
| |
Error — se o método for chamado e, enquanto a execução do worker que chama estiver pausada, o worker em aguardo for encerrado.
|
Wed Jun 13 2018, 11:10 AM Z