URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1479
[ Назад ]

Исходное сообщение
"глобальные переменные и процессы?"

Отправлено dek , 12-Мрт-03 13:16 
Имеется глобальный массив. Запускаю функцию в отдельном процессе, в ней изменяю некоторые значения в массиве, после выхода из функции оказывается, что значения в массиве остались прежними. Действительно ли функция,запущенная как отдельный процесс, не может изменить глобальные переменные?

Содержание

Сообщения в этом обсуждении
"RE: глобальные переменные и процессы?"
Отправлено NL , 12-Мрт-03 13:53 
>Имеется глобальный массив. Запускаю функцию в отдельном процессе, в ней изменяю некоторые
>значения в массиве, после выхода из функции оказывается, что значения в
>массиве остались прежними. Действительно ли функция,запущенная как отдельный процесс, не может
>изменить глобальные переменные?

а как ты создаешь процессы ?

если ты создаешь процессы с помощью fork(), то твой глобальный массив копируется, т.е. для каждого процесса появляется своя собственная копия массива и каждый процесс работает со своей копией массива и никак не влияя на остальных. и когда процесс завершает свою работу все его данные пропадают.

если с помощью pthread_create(), то скорее всего где-то напортачил. было бы хорошо посмотреть код


"RE: глобальные переменные и процессы?"
Отправлено XMan , 12-Мрт-03 19:01 
Кажись, в случае fork() можно пользовать динамический массив. В родителе выделил памяти и сделал потомка. Потомок что-то меняет и в родителе эти изменения видны. Впрочем, как и в других потомках.

"RE: глобальные переменные и процессы?"
Отправлено NL , 13-Мрт-03 11:42 
в случае fork() такого быть не может.

"RE: глобальные переменные и процессы?"
Отправлено XMan , 13-Мрт-03 14:57 
Хм... Действительно. Хотя адрес один и тот же.

PS. Все забыл с этой работой... Блин...


"глобальные переменные и процессы?"
Отправлено dek , 13-Мрт-03 11:18 
Вообще-то у меня как раз динамический массив и процесс создаю с помощью fork(). Спасибо за совет - попробую  pthread_create().