Программирование в реальном времени в Stack Overflow

У меня есть два класса C ++, objecManip а также updater, updater У класса есть таймер для проверки состояния манипулятора моего приложения.

Если он движется, то ничего не делайте, иначе getNextAction () из очереди действий.

Очередь действий заполняется классом objectManip, У меня есть глобальная переменная: current_status руки робота, в которой я нуждаюсь objectManip,

Проблема в том, что при заполнении очереди действий current_status берется постоянно не динамически.

-4

Решение

Вопрос очень неясен, так что это действительно удар в темноте, но вам нужно использовать атомарные типы данных. С C ++ 11 у вас есть std::atomic (увидеть Вот или же Вот. Для более ранней версии C ++, я думаю, вам нужно использовать какой-то определенный тип данных библиотеки или компилятора, который предлагает атомарные типы данных.

Если вы сделаете некоторые предположения о том, как многопоточность работает для вашего процессора и операционной системы, вы может сойти с рук просто объявив общие переменные volatile и чтение значения в переменную temp, когда вы его используете. volatile на самом деле предназначен для таких случаев, как чтение отображенных на аппаратном уровне значений, когда значение должно считываться из памяти каждый раз, поэтому многие оптимизации не возможны. Само по себе это не гарантирует атомарных обновлений, потому что поток, модифицирующий значение, может быть прерван в середине обновления, и тогда другое чтение может прочитать недопустимое, частично обновленное значение. Для логических значений это должно быть довольно безопасно. Для целых чисел, которые не пересекают границу слова памяти и размер слова которых меньше или меньше, это может быть безопасно на многих процессорах, которые не будут прерывать поток в середине написания одного слова памяти. В противном случае происходит повреждение данных. Некоторые (сегодня необычные) процессоры также не синхронизируют кэши между несколькими ядрами процессора, и в этом случае volatile не поможет, разные потоки могут видеть разные кэшированные значения. Итак, вывод: использовать volatile как в крайнем случае взломать!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]