Использование разделяемой памяти с fork ()

Я уже просмотрел единственный похожий пост, который смог найти, но это был не тот, который я искал.

По сути, я пытаюсь выполнить Сортировку нечетных и четных с разветвлением, так что потомок проверяет шансы, а родитель - эвены. И то, и другое требует совместного использования векторных inputValues, а также логического sorted.

Следующий код не содержит ни одной из моих неудачных попыток совместного использования памяти и представляет собой лишь базовую структуру для использования вилок с алгоритмом поиска:

while(!sorted)
{
    pID = fork();
    sorted = true;
    cout << "Sort set to TRUE." << endl;

    if(pID == 0)
    {
        int num = 1;
        cout << "Child swap run" << endl;
        Swap((void *) num);
        cout << "Status: " << ((sorted) ? "SORTED" : "UNSORTED") << endl;
        exit(0);
    }
    else if(pID < 0)
    {
        cout << "Failed to fork." << endl;
        exit(1);
    }
    else
    {
        wpid = waitpid(pID, &status, waitStatus);
        int num = 0;
        cout << "Parent swap run" << endl;
        Swap((void *) num);
        cout << "Status: " << ((sorted) ? "SORTED" : "UNSORTED") << endl;
    }
}

Я пробовал несколько способов взломать это совместное использование памяти, но не могу найти ни одного ресурса, который действительно объяснял бы, КАК это работает, что мне нужно, и лучший способ сделать это.

Итак, мои требования таковы. следующим образом:

  • Родитель и дочерний элемент должны иметь возможность совместно использовать и управлять глобальным вектором и логическим значением
  • Это должно иметь возможность запускаться в цикле, как показано
  • Это должно работать с переменными, используемыми в основном () и в функции swap ()

Если у вас есть какие-нибудь советы, я буду очень признателен. Спасибо!

7
задан Puppy 23 June 2011 в 12:59
поделиться