🧠 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
💻 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:
📌 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çãoENQBUSY
para evitar bloqueio indesejado:
-
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 — prefiraUOW
.
✅ 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.