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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
Дали тестовое задание.
Написать хеш таблицу с открытой адресацией. Главное качество, а не скорость, сказали.
Реализовал на C++.
Самая тягомотина - это тестирование многопоточности.
Есть операции: 
find, equalRange, operator [] - тот же equalRange, но возвращает все найденные вхождения, insert, remove, extend, size, capacity.

И вот надо каждую относительно другой проверять.  
Только это выходит (9 - 1)^2 тестов. Помимо остальных, уже реализованных.

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

Сойдет ли просто проверять время блокировки (shared_lock, и lock_guard) 
каждого параллельного текущему потоку относительно времени блокировки\старта\окончания блокировки текущего?
кроме связки (access - insert)?
Тем более, что операции записи\чтения проверяются в немногопоточном исполнении?

Запостил: OlegUP OlegUP, (Updated )

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

  • Тестовые задания нинужны.
    Ответить
  • Просто, если тестировать только тайминги старта\окончания\блокировки.
    То выходит, что я напишу тесты для std-шных классов блокировки и shared мьютексов.
    Ответить
  • запускаешь 5 инсертов из 5 потоков, ждешь пока потоки отработают и проверяешь что в хеш добавилась только 1 запись.

    и все остальное в таком-же духе
    Ответить
    • 5 записей.
      Поток выполнится в любом случае.
      Моя реализация соответствует unordered_multimap.
      Ответить
  • > Дали тестовое задание.
    > Написать хеш таблицу с открытой адресацией. Главное качество, а не скорость, сказали.

    Там многопоточность-то в тестовом задании точно была?
    Я в плюсах нихуя не соображаю, но зачем мьютексы, если можно всё реализовать на optimistic locking?
    Ответить
    • да и вроде нормальные фреймворки для обнаружения data race существуют: https://www.modernescpp.com/index.php/c-core-guidelines-use-tools-to-validate-your-concurrent-code
      тебе нужно не декартово произведение тестов, а просто несколько тредов, которые по-всякому трахают хэшмапу, а в конце проверяются инварианты.
      Ответить
      • Как можно формально доказать отсутствие гонок в случайном коде?
        Ответить
        • TLA+ какой-нибудь
          Только всё равно ж я просто предлагаю ему нормальное решение для того что он делает, а не гарантирую что-то
          Ответить
          • Я ламер, и вомзожно скажу хуйню, но разве там фишка не в том, что надо сначала описать алгоритм на TLA, и тогда ты можешь сказать естьли в нем гонки?

            а вот я дам тебе кусок кода на плюсах, как мне по нему чото понять?


            зы: Снаут, приходи давай, тут твою хуйню обсуждают
            Ответить
            • да, надо описать модель. тут шашечки или ехать: хотите доказать - стройте модель, не хотите - ну и ладно.
              Ответить
              • с другой стороны, алгоритм можно потом конвертнуть в код на плюсы с TLA, да?
                Ответить
            • Я бы сделал стресс-тест. Если есть проблема, то он найдёт.
              Ответить
              • кууик

                велика вероятность того, что рано или поздно он найдет проблему
                да
                Ответить
                • Ну а если не найдёт - то она не так уж часто будет стрелять в реале.
                  Ответить
  • ТС год не писал на С++, а тут ему дали тестовое задание про блять переизобретение более лучшей хешмапы, которое он делает уже полтора месяца (заказчика это, кстати, не смущает?). По-моему, тут проблемы побольше, чем непротестированная многопоточность
    Ответить
    • Почему вообще многопоточность? Там такое было в задании?
      Ответить
  • Блядь, как всё сложно. Поэтому я за "PHP", в котором есть влажненький "array".
    Ответить

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

Помни, guest, за тобой могут следить!

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


    8