A re-entrant is a program that doesn’t change itself. “How can a program change itself?” Does the word "Multi threading " looks familiar? Reentrant and mutithreading are related but somewhat different topics.
We can divide our program(logically) into three parts:
1. Program code – the instructions that are executed when a program runs.
2. Constants – constants used in a program. These are set when the program is written, and never change.
3.Working Storage area – or variables. This area changes when different user fires the same program.
"A reentrant Cobol program gives each user their own copy of working storage. "
For every user,MVS supplies the GETMAIN and STORAGE macros to support this and they can be
used by subsystems such as CICS or IMS or whatever to support reentrant programs.
For each user the copy of the working storage is dynamically acquired and initialized from the original copy. When a user interacts with the program , he only modifies his copy of the variables.
When the program is interrupted to give another user a turn to use the program, information about the data area associated with that user is saved.
So, what will happen if we write a CICS program as non-renetrant?
When one transaction waits, a second transaction can come and modify the working storage variables, and thus providing unstable or undesirable results.
Thus, Re-entrant programs allow a single copy of a program or routine to be used concurrently by two or more processes.
For cobol, we use the compiler option RENT to generate reentrant object program.