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

0

  1. 1
  2. 2
  3. 3
Нужно реализовать thread-safe set.
На сколько нормально разбить сет на N бакетов (по хешу, условно, 10000 штук),
тогда при добавлении или удалении элемента делать лок соответствующего бакета

Но будет хуево, когда пойдут запросы по одному ключу в нескольких тредах.
Есть решение лучше?

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

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

  • > по одному ключу в нескольких тредах

    Ну это уже неизлечимая проблема, как мне кажется, если они реально к одному ключу лезут... По крайней мере большую часть пересечений ты таким разбиением убрал.

    З.Ы. В джаве вроде такая реализация и есть.
    Ответить
    • можно сделать в каждом треде свой кеш, и обновлять его когда обнавляется значение

      если ты пишешь раз в год, а читаешь раз в ms, то будет хорошо
      Ответить
      • > если ты пишешь раз в год...

        ... то можно вообще не париться и юзать иммутабельные структуры. Один атомик на чтение корня и дальше вообще насрать на конкуренцию.
        Ответить
    • Был в сети анализ количества поправок в статьи по lock-free структурам данных, и из него следовало, что даже учёные - в воде мочёные постоянно обсираются в своём псевдокоде.
      Ответить
      • Надо было формально доказывать свои lock-free структуры, чтоб не обсираться.
        Ответить
      • > поправок в статьи

        Ага, там по-моему 99% статей про локфри в духе "они вот тут обосрались, но мы пофиксим это вот так"...

        Я даже не знаю, в итоге есть какая-нибудь формально корректная реализация?
        Ответить
    • Читать и писать примерно одинаково.
      Ответить

Добавить комментарий для bormand Отменить ответ

Семь раз отмерь — один отрежь, guest!

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


    8