Кресты / Говнокод #5572 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
void IRQHandler(void)
{
...
WaitSemaphore(semH);

Из кода для встроенного устройства реального времени.

Запостил: Говногость Говногость, (Updated )

Комментарии (13) RSS

    • >И где здесь говнокод?
      А как Вы себе представляете ожидание семафора в обработчике прерывания? Вот и говнокод.
      Ответить
      • А что, в обработчике прерывания запрещено использовать семафоры? Где это написано?
        Ответить
        • >А что, в обработчике прерывания запрещено использовать семафоры?
          Нет. Ждать их запрещенно. Это сразу блокируется переключение задач (фактически блокируется всё ядро и возможно на длительное время), блокируются прерывания с более низким приоритетом. Более того, если низкоприоритетные прерывания будут заблокированы длительное время - они могут потеряться.
          Если ядро одно, то не будет никого, кто мог бы разблокировать это ядро (не считая прерываний с более высоким приоритетом).
          Ответить
          • Подозреваю, что ты пытаешься описать как это работает в windows (ну или в какой-то другой конкретной системе). В коде про систему/железо ничего не написано, и без контекста ничего сказать нельзя.
            Да и если в данном случае все так как ты описываешь, это не говнокод, а тупо банальная ошибка.
            Ответить
            • Да в любой системе ждать семафора в прерывании - это фейл.
              Приведите пример хоть одной, где это не так?
              Ответить
              • полагаю, поциэнт думает, что бывают многозадачные прерывания
                Ответить
  • ну, как бы иногда требуется синхронизировать совместно используемые ресурсы, без этого никак. Другое дело, что надо крепко призадуматься, а действительно нужно делать так, или переделать вообще?
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8