4D v14.3Semaphore |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
Semaphore
Semaphore
Um semáforo é uma bandeira compartihada entre estações de trabalho (o computador de cada usuário) ou entre processos na mesma estação de trabalho. Um semáforo simplesmente existe ou não existe. Os métodos que cada usuário executa podem provar a existência de um semáforo. Criando e provando semáforos, os métodos podem ser comunicados entre estações de trabalho. A função Semaphore devolve TRUE e não faz nada se o semaforo existe. Se não existe o semáforo, Semaphore o cria e devolve FALSE. Só um usuário ao tempo pode criar um semáforo. Se semaforo devolve FALSE, isto significa que o semáforo não existe, mas também significa que o semáforo foi criado para o processo no qual a chamada for realizada. Semaphore devolve FALSE se o semáforo não foi definido. Também devolve FALSE se o semáforo já foi definido pelo mesmo processo no qual a chamada tenha sido realizada. semaforo está limitado a 255 caracteres, incluindo prefixos (<>, $). Se passa uma cadeia mais longa, o semáforo se truncará. • Um semáforo global é visível para todos os usuários e todos seus processos. Os semáforos globais são utilizados para monitorar operações entre usuários de uma base multi-usuário. Os semáforos globais e locais são idênticos em sua lógica. A diferença reside em seu alcance. Em 4D Server, os semáforos globais são compartilhados entre todos os processos executados de todos os clientes. Um semáforo local só se comparte entre os processos executados na máquina cliente onde for criada. Em 4D , os semáforos globais e locais tem o mesmo alcance porque você é o único usuário. Entretanto, se seu banco estiver sendo utilizada nos dois ambientes, tenha certeza de utilizar semáforos globais e locais dependendo do que queira fazer. Nota: os semáforos locais se recomendam quando o uso de um semáforo for necessário para manejar um aspecto local para um cliente da aplicação, tal como a interface ou um array de valores interprocesso. O uso de um semáforo global provocará neste caso, não só intercâmbios de rede desnecessários, mas também pode afetar outras máquinas cliente. O uso de um semáforo local evitará estes efeitos indesejáveis. Os semáforos não são utilizados para proteger o acesso aos registros. Esta gestão é realizada automaticamente 4D e 4D Server. Utilize semáforos para evitar que vários usuários realizem a mesma operação ao mesmo tempo. Neste exemplo, você quer evitar que dois usuários realizem simultâneamente uma atualização global dos preços em uma tabela Produtos. O seguinte método utiliza semáforos para fazer isto: If(Semaphore("AtualizacaoPreços")) ` tente criar o semáforo O exemplo a seguir utiliza um semáforo local. Em um banco de dados com vários processos, você pode querer manter uma lista de "Coisas a fazer". Você deseja manter a lista em um array interprocesso e não em uma tabela. Você utiliza um semáforo para evitar o acesso simultâneo. Nesta situação, só necessita utilizar um semáforo local, porque sua lista "Coisas a fazer" serve apenas para seu uso pessoal. O array interprocesso se inicializa no método Startup: ARRAY TEXT(◊ListaFazer;0) ` A lista de coisas a fazer está inicialmente vazia Este é o método utilizado para adicionar elementos à lista de coisas por fazer: ` Método de projeto AGREGAR A LISTA DE COISAS A FAZER Pode chamar este método desde qualquer processo. CloseEste método permite não executar um método se o semáforo está presente; o método informa o método de chamada com um código de erro e um texto plano. Sintaxe: $L_Error:=Semaphore_proof(->$T_Text_error) // Estrutura de proteção por semáforo |
PROPRIEDADES
Produto: 4D
HISTÓRIA
Modificado: 4D v11 SQL VER TAMBÉM
CLEAR SEMAPHORE ARTICLE USAGE
Manual de linguagem 4D ( 4D v12.4) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||