🧠 Explicação
O comando EXEC CICS DEQ é utilizado para liberar (desenfileirar) um recurso previamente reservado por uma tarefa com o comando ENQ. Isso permite que outras tarefas possam acessar o recurso de forma segura, evitando conflitos de acesso simultâneo.

O recurso pode ser identificado por qualquer sequência de 1 a 255 bytes (como um nome, chave ou código) e deve ser o mesmo utilizado no enfileiramento (ENQ).

Esse comando é thread-safe somente quando o recurso é tratado com escopo LOCAL. Se for GLOBAL (no escopo do sysplex), o comando não é thread-safe.

🛠️ Usos mais comuns

  • Garantir que recursos compartilhados sejam liberados após o uso.

  • Evitar conflitos entre tarefas que acessam o mesmo dado ou serviço.

  • Controlar a sincronização entre tarefas em sistemas CICS locais ou distribuídos.

🧾 Sintaxe

EXEC CICS DEQ
     RESOURCE(nome-do-recurso)
     [LENGTH(tamanho)]
     [MAXLIFETIME(CVDA)]
END-EXEC.

💻 Exemplo prático em COBOL

01  NOME-RECURSO     PIC X(09) VALUE 'SOCSEC001'.
01  TAM-RECURSO      PIC S9(4) COMP VALUE 9.

EXEC CICS DEQ
     RESOURCE(NOME-RECURSO)
     LENGTH(TAM-RECURSO)
END-EXEC.

Esse exemplo libera o recurso SOCSEC001 que foi anteriormente enfileirado com o mesmo nome e comprimento.

📋 Parâmetros e opções

Opção Descrição
RESOURCE(área-de-dados) Identifica o recurso que será liberado. Pode ser qualquer string de até 255 bytes.
LENGTH(valor) Define o tamanho do nome do recurso. Deve ser o mesmo usado no ENQ. Válido de 1 a 255.
MAXLIFETIME(CVDA) Indica se o ENQ foi feito com escopo da tarefa (TASK) ou unidade de trabalho (UOW). Valor padrão: UOW.

📌 Regras

  • Se o ENQ usou a opção LENGTH, o DEQ também deve usar e com o mesmo valor.

  • O DEQ só terá efeito se a tarefa realmente enfileirou o recurso.

  • Recursos enfileirados e não desenfileirados são liberados automaticamente no final da tarefa ou no ponto de sincronização.

  • Usar DEQ com escopo GLOBAL pode gerar afinidades de transação indesejadas (afeta o roteamento dinâmico de transações).

💡 Dicas

  • Sempre desenfileire recursos que foram enfileirados — evite dependência da liberação automática.

  • Use nomes de recursos padronizados e de tamanho fixo para facilitar a manutenção do código.

  • Utilize MAXLIFETIME(TASK) para liberar o recurso somente ao fim da tarefa inteira, se necessário.

  • Se estiver trabalhando com escopo GLOBAL, consulte a definição de ENQMODEL e avalie o impacto.

✅ Conclusão
O comando EXEC CICS DEQ é fundamental para a coordenação segura de acesso a recursos compartilhados entre tarefas. Ele garante que recursos reservados sejam liberados corretamente, evitando conflitos e bloqueios indevidos. Sua utilização correta, sempre em conjunto com o comando ENQ, melhora a performance e a confiabilidade de aplicações CICS multiusuário.