Pacote | flash.concurrent |
Classe | public final class Mutex |
Herança | Mutex Object |
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
shareable
é true
). Contudo, uma Mutex pode ser usada para gerenciar o acesso de workers a qualquer recurso compartilhável, como uma extensão nativa para AIR ou um arquivo filesystem. Não importa qual recurso, o objetivo da mutex é garantir que somente um conjunto de códigos acesse o recurso de cada vez.
Uma mutex gerencia o acesso usando o conceito de propriedade de recurso. A qualquer momento uma mutex "pertence" a no máximo um worker. Quando a propriedade de uma mutex alterna de um worker para outro, a transição é atômica. Isso garante que nunca será possível que mais de um worker tenha propriedade da mutex. Contanto que o código em um worker opere somente em um recurso compartilhado quando esse worker possuir a mutex, você pode ter certeza de que não haverá conflito com vários workers.
Use o método tryLock()
para obter a propriedade da mutex se estiver disponível. Use o métodolock()
para pausar a execução do worker atual até que a mutex esteja disponível e, em seguida, tome a propriedade da mutex. Quando o worker atual tiver a propriedade da mutex, ele pode operar com segurança em um recurso compartilhado. Quando essas operações forem concluídas, chame o método unlock()
para liberar a mutex. Nesse momento, o worker atual não deve mais acessar o recursos compartilhado.
A classe Mutex é um dos tipos de objeto especial compartilhado entre os workers, em vez de copiados entre eles. Quando você passa uma mutex 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 Mutex na memória do runtime.
Elementos da API relacionados
Método | Definido por | ||
---|---|---|---|
Mutex()
Cria uma nova ocorrência de Mutex. | Mutex | ||
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 | ||
Pausa a execução do worker atual até que essa mutex esteja disponível e obtenha a propriedade da mutex. | Mutex | ||
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 | ||
Adquire propriedade da mutex se estiver disponível. | Mutex | ||
Libera a propriedade desta mutex, o que eu permite que qualquer worker a adquira e realize trabalho no recursos associado. | Mutex | ||
Retorna o valor primitivo do objeto especificado. | Object |
Mutex | () | Construtor |
public function Mutex()
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
Cria uma nova ocorrência de Mutex.
Lança
Error — se a mutex não pode ser inicializada.
|
lock | () | método |
public function lock():void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
Pausa a execução do worker atual até que essa mutex esteja disponível e obtenha a propriedade da mutex. Se outro worker possuir a mutex quando lock()
for chamado, o thread de execução do worker que chama pausa na chamada lock()
e o worker é adicionado à fila de solicitações de propriedade. Quando o worker que chama adquirir a mutex, a execução do worker continua com a linha de código, seguindo a chamada lock()
.
Quando o worker atual tiver a propriedade da mutex, ele pode operar com segurança em um recurso compartilhado. Quando essas operações forem concluídas, chame o método unlock()
para liberar a mutex. Nesse momento, o worker atual não deve mais acessar o recursos compartilhado.
Internamente, uma mutex conta o número de solicitações de bloqueio que recebeu. A mutex deve receber o mesmo número de solicitações de desbloqueio antes de ser completamente liberada. Se o código do worker que possui a mutex a bloquear novamente (chamando o método lock()
) a contagem interna de bloqueio aumenta em um. Você deve chamar o método unlock()
o mesmo número de vezes que o número de solicitações de bloqueio para liberar a propriedade da mutex.
Quando vários workers estiverem aguardando uma mutex, a mutex passa a prioridade para atribuir propriedade ao worker que aguarda há mais tempo. Contudo, o agendamento de encadeamentos worker é gerenciado pelo sistema operacional host, então não há garantia de uma ordem de execução de código específica em todos os workers.
tryLock | () | método |
public function tryLock():Boolean
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
Adquire propriedade da mutex se estiver disponível. Se outro worker já possuir a mutex ou outro worker chamou o método lock()
e está aguardando para adquirir a mutex, a mutex não está disponível. Nesse caso, chamar esse método retorna false
e a execução de código continua imediatamente.
Quando o worker atual tiver a propriedade da mutex, ele pode operar com segurança em um recurso compartilhado. Quando essas operações forem concluídas, chame o método unlock()
para liberar a mutex. Nesse momento, o worker atual não deve mais acessar o recursos compartilhado.
Quando vários workers estiverem aguardando uma mutex, a mutex passa a prioridade para atribuir propriedade ao worker que aguarda há mais tempo. Contudo, o agendamento de encadeamentos worker é gerenciado pelo sistema operacional host, então não há garantia de uma ordem de execução de código específica em todos os workers.
RetornaBoolean — true se a mutex estava disponível (e agora é possuída pelo worker atual), ou false se o worker não adquiriu a propriedade da mutex.
|
unlock | () | método |
public function unlock():void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 11.5, AIR 3.5 |
Libera a propriedade desta mutex, o que eu permite que qualquer worker a adquira e realize trabalho no recursos associado.
Internamente, uma mutex conta o número de solicitações de bloqueio que recebeu. O código em um worker deve chamar o método unlock()
o mesmo número de vezes que o número de solicitações de bloqueio para liberar a propriedade da mutex.
Lança
IllegalOperationError — quando o worker atual não possui a mutex.
|
Wed Jun 13 2018, 11:10 AM Z