У меня есть проблемы с вилкой и ее копией на системе записи. Я создам params.writersCount procesess и каждый из них должен получить свой внутренний идентификатор (от 1 до params.writersCount). Поэтому в дочернем я жду родительского процесса, который инициализирует внутренний идентификатор childs (авторы [i] = processId). Затем я могу вызвать scriptSimulation и передать контекстный адрес, как аргумент, потому что в context.id теперь правильный внутренний идентификатор для этого дочернего элемента, из-за копирования на систему записи (context.id = j + 1 заставит unix копировать страницу, поэтому каждый ребенок имеет затем собственную копию контекста со своим внутренним идентификатором). Но если я пытаюсь использовать context.id в функции writerSimulation, я получаю 0. Что я делаю неправильно?Вилка и общие страницы
for(int i = 0; i < params.writersCount; i++)
{
pid_t processId = fork();
if(!processId)
{
srand((unsigned int)(seconds+getpid()));
while(!context.id)
{
for(int j = 0; j < params.writersCount; j++)
{
if(writers[j] == getpid())
{
context.id = j+1;
}
}
struct timespec wait = {.tv_sec = 0, .tv_nsec = 500000};
nanosleep(&wait, NULL);
}
int simError = writerSimulation(&context);
return simError;
}
writers[i] = processId;
}
введите стандартный английский язык, в том числе столиц. – thb