Как уменьшить зависимость, вызванную глобальными переменными в программе c - PullRequest
2 голосов
/ 04 июля 2019

Я хочу ускорить обработку последовательной программы на C, используя многопоточность. Моя проблема в том, что в моей C-программе много глобальных переменных. Они читаются и пишутся функциями в моей C-программе. Поэтому предотвращается параллельное распараллеливание функций посредством многопоточности, поскольку он больше не содержит точного результата по сравнению с запущенными программами последовательности.

Я использую OpenMP для управления моей C-программой. Тем не менее, я хочу реорганизовать свою программу на C, чтобы она реагировала на вышеуказанные цели перед использованием OpenMP

Вот мой пример:

int a = 5 ; // global variable

funcA () {
    int b; 
    b = a + 5; // read a
}

funcB () {
    printf("%d\n", a); 
}

Я не хочу находить способ параллельного завершения funcA и funcB, но я хочу уменьшить вызванную зависимостью глобальную переменную (например, переменную a в приведенном выше примере).

Ответы [ 2 ]

1 голос
/ 04 июля 2019

В общем случае удалить глобальные переменные непросто.

Вы должны работать в каждом конкретном случае.

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

В данном примере я не могу дать никакого решения, не посмотрев, как вызываются функции funcA и funcB. Вы должны попытаться передать переменную a в качестве параметра обеим функциям. Возможно, вам придется вернуться к нескольким функциям, пока вы не доберетесь до общей функции, которая в конечном итоге вызывает обе функции.

1 голос
/ 04 июля 2019

Нет простого способа сделать сложную вещь.Иногда может показаться трудным разработать код без глобальных переменных, даже если кодирование начинается с нуля.В вашем случае проблема значительно сложнее.

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

Единственное, что может бытьсделано:

  • проанализировать базу кода;
  • понять назначение глобальных переменных и то, как они используются;
  • найти способ добиться того же поведениябез использования глобальных переменных.

Конечно, с некоторыми глобальными переменными может быть проще работать, чем с другими.Вы можете начать с первого.Наблюдение за успехом поможет вам улучшить настроение во время выполнения задания.

Это может помочь вам, если вы прочтете о том, как сделать код:

  • безопасный шаг;
  • повторный вход.

Google может вам в этом сильно помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...