1. C# / Говнокод #11231

    +134

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    public static DataSet GetSomeDataSet()
    {
        DataSet ds = null;
        object locker = new object();
        lock (locker)
        {
            if (ds == null)
            {
                // тут инициализация ds
    
                return ds;
            }
            else return ds;
        }
    }

    Метод из работающей проги. Возпроизвёл по памяти, но суть именно такая.
    Насколько понимаю, человек хотел результаты работы метода кэшировать в локальную переменную.
    Да ещё и lock на локальную переменную, который никогда не используется.

    Запостил: Ordos, 19 Июня 2012

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

    • Такое ощущение, что раньше ds тоже был static'ом...
      Ответить
      • Мне тоже так показалось, но система контроля версий показывает, что этот код был изначально.
        Ответить
    • Похожее было
      http://govnokod.ru/7714
      Ответить
    • показать все, что скрыто2.71828 18284 59045 23536 02874 71352 66249 77572 47093 69995 95749 66967 62772 40766 30353 54759 45713 82178 52516 64274 27466 39193 20030 59921 81741 35966 29043 57290 03342 95260 59563 07381 32328 62794 34907 63233 82988 07531 95251 01901 15738 34187 93070 21540 89149 93488 41675 09244 76146 06680 82264 80016 84774 11853 74234 54424 37107 53907 77449 92069 55170 27618 38606 26133 13845 83000 75204 49338 26560…
      Ответить
    • Круто, тут и лок на локальную переменную, и попытка написать double checked locking без memory barriers.
      Ответить
      • А где тут double checking locking? Тут тупая защищенная мутексом инициализация. Проверкой перед локом даже не пахло.
        Ответить
        • А где вы тут мютекс видите?
          Ответить
          • А lock в c# разве не имеет семантику мутекса?
            P.S. И где же здесь все-таки double checking?

            UPD: The lock keyword marks a statement block as a critical section by obtaining the mutual-exclusion lock for a given object, executing a statement, and then releasing the lock.
            Ответить
            • Чуть выше был не я.
              Я это, того, зачем написал "попытка"? Конечно тут субъективное, и со зрением у меня плохо, но мне кажется автор хотел нечто подобное. Оп в комменте признаётся, что написал по памяти.
              Ответить
              • > Конечно тут субъективное
                Ок, на этой ноте пожалуй и закончим спор ;) То что хотел выразить ОП, к сожалению, знает только он (а может и он не знает...).
                Ответить

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