WedX - журнал о программировании и компьютерных науках

Реентерабельные функции, требующие усреднения переменных

Это довольно простой вариант, для которого я просто не могу придумать хорошего решения. У меня есть код, представляющий собой архитектуру типа superloop (без ОС). В функциях, которые требуют усреднения, есть некоторые проверяемые: т. е. необходимо иметь один и тот же входной результат три раза подряд, чтобы вызвать условие «Истина». Мой босс сейчас настаивает на том, чтобы все эти функции были реентерабельными, а это означает, что мой старый метод статических локальных переменных никуда не годится. Он также не хочет дополнительных глобальных переменных. Итак, есть ли другой хороший способ сохранить усреднение условий для нескольких контекстов, чтобы позволить функциям быть полностью реентерабельными?

Пример текущего кода:

 void foo (void)
    {
        static unsigned int ConditionCount = 0;

        if("SomeCondition" == TRUE)
            {ConditionCount++;}

        if(ConditionCount >= 3)
            {DoSomething();}
    }
20.09.2012

  • По какой причине ваш босс вдруг хочет, чтобы они были реентерабельными? 20.09.2012
  • На самом деле, это новый босс, который имеет опыт разработки RTOS. Моим старым боссом был... я. 20.09.2012

Ответы:


1

Чтобы сделать его реентерабельным, передайте указатель и позвольте вызывающей стороне поддерживать каждый ConditionCount.

 void foo (int *ConditionCount)
    {
        if("SomeCondition" == TRUE)
            {(*ConditionCount)++;}

        if(*ConditionCount >= 3)
            {DoSomething();}
    }
20.09.2012
  • Ах, конечно, я подозревал, что это может быть ответом. Добавлю еще одно замечание: что, если я скажу, что существует отраслевой стандарт, специально рекомендующий свести к минимуму использование указателей? 20.09.2012
  • указатели не являются злом как таковые. Это вполне допустимые сценарии, когда они нам нужны. Минимизация — это хорошо, но вы не можете полностью избежать ее, если вы C-программист. 20.09.2012
  • Обычно это рассматривается как передача указателя на struct, который содержит весь необходимый контекст, поэтому некоторые из нас называют это структурой контекста. Он также используется, чтобы сделать код потокобезопасным, и в этом случае вы скажете, что передаете контекст потока. 20.09.2012
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]