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

    +136

    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
    16. 16
    private void StatusMsg(string message, int delay = 1000)
     {
          lock (_msgQueue)
          {
            if (_msgQueue.ContainsKey(message))
            {
              int i = 1;
              message = String.Format("{0} {1}", message, i);
              while (_msgQueue.ContainsKey(message))
              {
                message = String.Format("{0} {1}", message.Substring(0, message.LastIndexOf(' ')), i++);
              }
            }
            _msgQueue.Add(message, delay);
          }
     }

    Чёто я не понимаю

    Запостил: taburetka, 21 Марта 2013

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

    • Все, въехал. Но блядь, почему так через жопу??
      Ответить
    • Конкурентность и атомики - баловство. Залочил очередь и делай своё дело. Просто - значит надёжно.
      Ответить
      • while зачем??? И этого человека назначили начальником отдела
        Ответить
        • while чтобы подобрать подходящий ключ, такой, что сочетание msg id не встречается в "очереди" (при этом в теории оно уже могло встречаться в "очереди" раньше, но его оттуда выгребли). Совершенно неясно, зачем это нужно, нужно ли вообще, и почему нельзя обойтись глобальным атомарным счётчиком, если оно всё же требуется.

          Очередь в кавычках, ибо я никак не ожидал наличия у очереди метода ContainsKey.
          Ответить
          • А вынимают сообщение из этой очереди путем ее полного обхода и поиска минимального i? А что, эффективно.
            Ответить
          • Кстати будет забавно, если этот _msgQueue не Set, а тупо массив, и вставка n одинаковых сообщений будет производиться всего за O(n^3)...
            Ответить
            • А, это всяко не массив, судя по строке 14 это скорее всего мап.
              Ответить
      • Да. Тут идиоты всякие срутся о ерунде типа double-checked locking.
        Но Тришка не дурак, он всё залочит чтоб было на верняк.
        Ответить
    • It's priority queue?
      Ответить
      • Чтож вы все так артикли не любите
        Ответить
        • Так Гумно ни одного языка толком не знает.
          Ответить
          • I can't into English, sorry. Can I become your Padawan?
            Ответить
            • На Хацкиле давай DSL. И ссылку на ideone где твоя просьба компилируется.

              > Чтож вы все так артикли не любите
              Проблема в том что английский не выдает ошибок или предупреждений, когда пишут без артикля.
              И только присутствие grammar-nazi в треде включает strict mode.
              Ответить
              • > На Хацкиле давай DSL
                DSL модем с прошивкой на хаскеле?

                > Проблема в том что английский не выдает ошибок или предупреждений, когда пишут без артикля.
                Еще как выдает: http://govnokod.ru/12776#comment172621, http://govnokod.ru/12776#comment172631
                Ответить
        • > Чтож вы все так артикли не любите
          It's a priority queue?
          Ответить
    • while (_msgQueue.ContainsKey(message)) 
                {
                  message = String.Format("{0} {1}", message.Substring(0, message.LastIndexOf(' ')), i++);
                }



      Насколько я знаю и как показывает вышеприведенный код, containsKey возвращает bool, что приводит к вечному циклу. Разве нет? Или в другом потоке коллекция может изменится и цикл завершится?
      Господь всемогущий за что?

      PS
      Относительно тс, хочу сказать, что встречал таких "начальников". И судя по тому как пришлось работать, какие задачи ставились, то лучше бы я сразу уволился.
      А конкретно этому братцу, лучше лет так 5 не писать ничего сложнее университетских лабораторных работ.
      Ответить
      • > что приводит к вечному циклу
        message же меняется на каждой итерации, с чего вдруг _msgQueue начнёт всегда возвращать true?
        Ответить
        • ой, точно.
          А что вообще тогда тут происходит?
          Ответить
          • какая-то необъяснимая волшебная хуета
            Ответить
            • Кажется разобрался.
              Походу на каждое сообщение созданное и добавленное в эту "очередь обработки" создается строка содержащее текст сообщения и кол-во таких сообщений в "очереди обработки".
              Ответить
          • Если добавляют два несколько одинаковых сообщений, то к ним будут приписаны разные числа. Поэтому они не пропадут из мапа.
            Ответить
    • vanished
      Ответить

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