🧠 Explicação

O comando EXEC CICS ENQ é utilizado para enfileirar (travar) um recurso em uma aplicação CICS, garantindo que apenas uma tarefa por vez tenha acesso exclusivo a esse recurso. Isso é essencial para evitar conflitos e garantir consistência quando múltiplas tarefas tentam acessar ou modificar dados simultaneamente.

🔧 Usos mais comuns

  • Proteger o acesso a um recurso compartilhado (como um registro de funcionário, cliente, etc.) entre várias tarefas.

  • Garantir que apenas uma instância de um programa ou trecho crítico de código esteja em execução por vez.

  • Controlar concorrência em ambientes multiusuário, evitando inconsistências ou corrupção de dados.

🧾 Sintaxe

EXEC CICS ENQ
     RESOURCE(nome-do-recurso)
   [ LENGTH(tamanho) ]
   [ MAXLIFETIME(UOW | TASK) ]
   [ NOSUSPEND ]
END-EXEC.

💻 Exemplo prático

1. Enfileirando um recurso por nome direto:

EXEC CICS ENQ
     RESOURCE(RESNAME)
END-EXEC.

2. Enfileirando um recurso com conteúdo e tamanho fixo:

01 SOCSECNO   PIC X(09) VALUE '123456789'.

EXEC CICS ENQ
     RESOURCE(SOCSECNO)
     LENGTH(9)
END-EXEC.

3. Usando tempo de vida máximo do enfileiramento como tarefa inteira:

EXEC CICS ENQ
     RESOURCE(RESNAME)
     MAXLIFETIME(TASK)
END-EXEC.

📌 Regras

  • LENGTH é obrigatório quando você deseja enfileirar com base no conteúdo da variável.

  • Sem a opção LENGTH, o CICS considera o recurso com base no endereço da variável.

  • Se dois programas usarem LENGTH e outros não, o CICS tratará como recursos diferentes.

  • O escopo pode ser local ou global (sysplex) se um modelo ENQMODEL estiver definido com ENQSCOPE.

  • Se o recurso estiver ocupado e NOSUSPEND não for usado, a tarefa espera até a liberação.

  • A ausência de DEQ faz com que o CICS libere automaticamente o recurso no fim da UOW ou da tarefa.

💡 Dicas

  • Utilize NOSUSPEND com tratamento de condição ENQBUSY para evitar bloqueio indesejado:

 
EXEC CICS ENQ
     RESOURCE(MINHAAREA)
     NOSUSPEND
END-EXEC.
EXEC CICS HANDLE CONDITION ENQBUSY(ROTULO-TRATAMENTO)
  • Sempre combine corretamente ENQ e DEQ, com ou sem LENGTH, para evitar falhas de sincronização.

  • Evite MAXLIFETIME(TASK) se o recurso puder impactar outras tarefas por muito tempo — prefira UOW.

 

✅ Conclusão

O comando EXEC CICS ENQ é essencial para controle de concorrência em ambientes CICS. Ele permite que apenas uma tarefa acesse um recurso por vez, protegendo dados compartilhados e garantindo integridade em aplicações multiusuário. Seu uso correto, especialmente em conjunto com DEQ, é fundamental para evitar deadlocks e travamentos desnecessários.