1. C++ / Говнокод #5572

    +160

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

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

    Запостил: Говногость, 08 Февраля 2011

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

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

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