Intereting Posts
ENFILE, переполнение таблицы файлов, при использовании ядра iterate_dir Как найти длину argv в C буферизующее поведение stdout в c будет правая часть выражения, всегда оцениваемого первым Ошибка выхода OpenMPI Кодирование getline () имплантации – ошибки Valgrind как ссылаться на локальную переменную совместно использовать одно и то же имя глобальной переменной в C? Количество элементов в перечислении поиск открытого ключа на сервере ключей с GPGME Как искать и сортировать BST по имени (строка)? Печать по очереди и отступом? Запись полного буфера с использованием системного вызова write () как сделать несколько байт чтения / записи HDD / USB в c OpenCL: сохранить указатель на глобальную память в локальной памяти? Вычислить произведение двойного слова (подписанное) из двух слов, учитывая нижнее словосочетание добавьте строку «\\? \» в путь – DriverPackageUninstall

создание streamа внутри дочернего процесса

#include #include int value=0; void *runner(void *param); int main(int argc,char *argv[]) { int pid; pthread_t tid; pthread_attr_t attr; pid=fork(); if(pid==0){ pthread_attr_init(&attr); pthread_create(&tid,&attr,runner,NULL); pthread_join(tid,NULL); printf("CHILD VALUE=%d",value); } else if(pid>0){ wait(NULL); printf("PARENT VALUE=%d",value); } } void *runner(void *param){ value=5; pthread_exit(0); } 

какова ценность ребенка и родителя? будет ли дочерний элемент и созданный им stream совместно использовать данные? поэтому выход будет равен 5 и 0?

будет ли дочерний элемент и созданный им stream совместно использовать данные?

Нет. Детский процесс можно рассматривать как получение копии, если память родителя. Таким образом, любые изменения, внесенные дочерним элементом, не видны родителям.

поэтому выход будет равен 5 и 0?

Да: ребенок печатает 5, родительские отпечатки 0 (необязательно в этом порядке).

Что происходит, так это:

  • дочерний процесс создается путем дублирования пространства памяти родителя. Он будет видеть те же данные, что и родительский, но это только копия, поэтому они не могут мешать друг другу. Любые последующие изменения, выполняемые дочерним процессом (или любым его streamом!), Будут видны только для себя.
  • stream, порожденный дочерним элементом, разделяет пространство памяти с основным streamом дочернего процесса и, опять же, видит копию значений в родительском процессе.

Следовательно, поскольку значение, назначенное в streamе, порожденном дочерним, будет видимым только внутри дочернего процесса, но не внутри родительского процесса, результаты равны 5 и 0.