Повторное поступление кода путаница

Я пытаюсь точно понять, что означает код повторного входа. У меня есть этот код:

void HWt::startElement(uint8_t HW, uint8_t val)
{
writeBitsToregister(REG_VAL + HW*131072, 0, 3, val); //Write bits 0-2
writeBitToregister(REG_VAL, 3, 1);  //Set bit 3 to 1
writeBitToregister(REG_VAL, 3, 0); //Set bit 3 to 0
}

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

Как сделать так, чтобы это было безопасно? Кроме того, я не понимаю, что здесь означает повторный участник? Как один и тот же поток может получить доступ к этой функции много раз? Может ли это произойти, только если это вызывается в ISR или рекурсивно? Это ни одна из этих вещей.

1

Решение

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

Однако, например, в MS-DOS или в коде ядра прерывание может произойти в любой момент во время выполнения функции, возможно, вызывая функцию самостоятельно; это может иметь странные побочные эффекты, если функция не написана специально, чтобы избежать этого.

Смотрите также: http://en.wikipedia.org/wiki/Reentrancy_%28computing%29

3

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


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