пространство текущего процесса. Обратите внимание
exit(-1);
}
new = 0;
}
}
/* Пытаемся отобразить разделяемую память в адресное
пространство текущего процесса. Обратите внимание на то,
что для правильного сравнения мы явно преобразовываем
значение -1 к указателю на целое.*/
if((array = (int *)shmat(shmid, NULL, 0)) ==
(int *)(-1)){
printf("Can't attach shared memory\n");
exit(-1);
}
/* В зависимости от значения флага new либо
инициализируем массив, либо увеличиваем
соответствующие счетчики */
if(new){
array[0] = 0;
array[1] = 1;
array[2] = 1;
} else {
array[1] += 1;
for(i=0; i<1000000000L; i++);
/* Предельное значение для i может меняться в зависимости
от производительности компьютера */
array[2] += 1;
}
/* Печатаем новые значения счетчиков, удаляем разделяемую
память из адресного пространства текущего процесса и завершаем
работу */
printf("Program 1 was spawn %d times,
program 2 - %d times, total - %d times\n",
array[0], array[1], array[2]);
if(shmdt(array) < 0){
printf("Can't detach shared memory\n");
exit(-1);
}
return 0;
}
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий