The following code at the entry to a program ensures that only the first thread entering a program will initialize data and all following threads will have that preinitialized data available:
if first-time = 0 call "cbl_thread_prog_lock" if first-time = 0 initialize my-data-division move 1 to first-time end-if call "cbl_thread_prog_unlock" end-if
Note the double check of the first-time variable. The first check is an optimization that avoids the overhead of locking the program if we know for sure that it has already been initialized.