A sintaxe formal da estrutura Use...End use é:
Use(Shared_object_or_Shared_collection)
statement(s)
End use
A estrutura Use...End use define uma sequência de instruções que executará tarefas no parâmetro Shared_object_or_Shared_collection sob a proteção de um semáforo interno. Shared_object_or_Shared_collection pode ser qualquer objeto compartido ou coleção compartida válidos.
Os objetos compartidos e as coleções compartidas estão desenhados para permitir a comunicação entre processos, em particular, Processos 4D Preemptivos. Podem ser passadas por referência como parâmetros de um processo a outro. Para informação detalhada sobre objetos compartidos ou coleções compartidas, consulte a página Objetos compartidos e Coleções compartidas. As modificações circundantes em objetos compartidos ou coleções compartidas pelas palavras chaves Use...End use são obrigatórias para evitar o acesso concorrente entre processos.
- Quando a linha Use for executada com êxito, todas as propriedades/elementos Shared_object_or_Shared_collection bloqueiam para o resto do processo no acesso de escrita até se execute a linha End use correspondente.
- A sequência de instruções pode ser executada qualquer modificação nas propriedades/elementos Shared_object_or_Shared_collection sem risco de acesso concorrente.
- Se for agregado outro objeto ou coleção como propriedade de parâmetro Shared_object_or_Shared_collection, se conectam dentro do mesmo grupo compartilhado (ver Usar objetos ou coleções compartidos)..
- Se outro processo tentar acessar a uma das propriedades Shared_object_or_Shared_collection ou as propriedades conectadas enquanto se estiver executando uma sequência Use...End use, se põe automaticamente em espera e espera até que finalize a sequência atual.
- A linha End use desbloqueia as propriedades Shared_object_or_Shared_collection e todos os objetos que compartem o mesmo identificador de bloqueio.
- Várias estruturas Use...End use podem ser aninhadas nol código 4D. Nesse caso, todos os bloqueios são empilhados e as propriedades/elementos se liberarão só quando for executada a última chmada End use.
Nota: se uma função membro de uma coleção (ver Member method) modifica uma coleção compartida, se chama automaticamente a um Use interno para esta coleção compartida enquanto se executa a função.