2012-01-25 2 views
0

Я использую команды управления программой EXEC CICS, LINK, XCTL и RETURN для передачи данных между программой Cobol. Общая память CICS повреждена во время одного из моих действий. Похоже, что прошедшая COMMAREA перезаписывает память, которая не принадлежит CICS. Чтобы узнать, почему возникла эта проблема, мне нужно лучше знать, как CICS управляет разделяемой памятью, когда я использую команды управления программой EXEC CICS. Копирует ли она COMMAREA или использует указатель? Используя вложенные EXEC CICS, сколько COMMAREA хранится в общей памяти?Как работает общая память CICS?

Конфигурация: Я использую компилятор Microfocus Net Express, а среда - UniKix.

PS: Проверьте этот вопрос What can cause CICS transaction to write out of CICS allocated memory?, если вы знаете больше об использовании с использованием EXEC CICS.

ответ

2

Не уверен, что в Net Express, но в CICS доступ к commarea осуществляется с помощью указателя.

Так что если программа x LINKS для программирования y, любые обновления, сделанные для commarea в y, будут видны в x.

Мне становится хуже, если определение Commarea в y больше, чем определение в x - вы можете обновлять переменные после commarea.

Для XCTL, то COMMAREA будет скопирован в область управления CICS и указатель передается программе

+1

Это на самом деле работает только в очень ограниченных ситуациях. Исторически, да, это было прекрасно. Но IBM была большой в сегменте своих регионов в конкретные функции на протяжении десятилетий. Таким образом, указатель на разделяемую память отлично работает AS LONG AS LINKed/RETURNed/XCTLed PROGRAM в том же AOR, но это терпит неудачу, если происходит какая-либо динамическая маршрутизация транзакций. –

+1

Почти абсолютное правило НИКОГДА не предполагает разделяемую память и НИКОГДА не кладет указатели на коммерческую. Он может работать в тестовом стенде Microfocus, но он будет терпеть неудачу, когда это будет его производство. –

Смежные вопросы