🧠 Explicação

O comando EXEC CICS SUSPEND serve para suspender a execução de uma tarefa no CICS, cedendo o controle para outras tarefas de mesma ou maior prioridade. O controle é retomado automaticamente assim que não houver nenhuma outra tarefa com prioridade igual ou superior pronta para execução.
Já no contexto BTS (Business Transaction Services), o SUSPEND serve para congelar temporariamente um processo ou atividade, impedindo sua reanexação ao serem disparados eventos do pool.

🔧 Usos mais comuns

  • Controlar o uso do processador, evitando que uma tarefa monopolize a CPU.

  • Implementar esperas cooperativas entre tarefas de mesma prioridade.

  • No BTS, suspender atividades filhas ou processos adquiridos temporariamente.

  • Trabalhar em conjunto com RESUME para controle de sincronismo entre atividades BTS.

🧾 Sintaxe

Suspensão da tarefa atual:

EXEC CICS SUSPEND END-EXEC.

Suspensão no contexto BTS (atividade ou processo):

EXEC CICS SUSPEND
     ACTIVITY("ATV01")
END-EXEC.
EXEC CICS SUSPEND
     ACQACTIVITY
END-EXEC.
EXEC CICS SUSPEND
     ACQPROCESS
END-EXEC.

💻 Exemplo prático

Suspender execução da tarefa atual:

PERFORM PROCESSAMENTO-PESADO

EXEC CICS SUSPEND END-EXEC.

PERFORM PROCESSAMENTO-ADICIONAL

Suspender atividade adquirida (BTS):

EXEC CICS SUSPEND
     ACQACTIVITY
END-EXEC.

📌 Regras

  • No uso padrão, SUSPEND só afeta a tarefa atual e não precisa de parâmetros.

  • No contexto BTS, você só pode suspender:

    • Um processo que você adquiriu via ACQUIRE PROCESSID.

    • Uma atividade filha ativada por você ou adquirida via ACQUIRE ACTIVITYID.

  • Para retomar o que foi suspenso, use RESUME com o mesmo identificador (atividade ou processo).

  • Se mais de uma tarefa com mesma prioridade estiver pronta, a retomada pode não ser imediata.

  • Não suspende indefinidamente — o controle retorna assim que o escalonador permitir.

💡 Dicas

  • Evite usar SUSPEND em laços ou rotinas críticas — pode prejudicar a performance da transação.

  • Em ambientes concorrentes, use SUSPEND como alternativa leve ao WAIT EVENT se não precisar de espera por evento externo.

  • Combine com RESUME e ENDEXEC no BTS para controlar o fluxo entre atividades.

  • Em sistemas com alta carga, o tempo de suspensão pode ser maior do que o esperado — planeje com cautela.

🚨 Condições que podem ocorrer

  • INVREQ: uso incorreto da opção ou contexto inválido.

  • ACTIVITYERR: falha ao suspender a atividade BTS.

  • ACTIVITYBUSY: a atividade está em uso por outro processo.

  • LOCKED: o recurso está bloqueado.

  • PROCESSERR: falha ao suspender o processo.

  • IOERR: erro de entrada/saída em contexto BTS.

Conclusão

EXEC CICS SUSPEND é uma ferramenta útil para pausas controladas em tarefas CICS, seja em execução normal ou no contexto do BTS. Ele oferece um mecanismo simples para espera voluntária, permitindo que outras tarefas com prioridade semelhante ou maior sejam processadas primeiro. Quando usado com consciência, ajuda a manter a justiça no uso da CPU e a orquestração de processos em aplicações mais complexas.