Аскон 2023: Проблема ABA и методы её решения в современном C++.

Поделиться
HTML-код
  • Опубликовано: 12 сен 2024

Комментарии • 19

  • @WW-ee3zf
    @WW-ee3zf Год назад +13

    Modern Mr. Proper, как всегда хорош

  • @pavelrid
    @pavelrid Год назад +7

    Классная лекция! 👍

  • @alex_s_ciframi
    @alex_s_ciframi Год назад +6

    Константин, спасибо за доклад.
    Вот тут не испуганная девушка 14:07
    А вот тут испуганная 17:20
    Доклад удался :D

  • @MakinsxXx
    @MakinsxXx Год назад +10

    Легенда

  • @maksimusik-on
    @maksimusik-on 11 месяцев назад

    Интересная лекция

  • @DART2WADER
    @DART2WADER Год назад +1

    Я надеялся что доклад выложит аскон. Но ... )))

  • @_NightFox
    @_NightFox Год назад +1

    Здравствуйте, спасибо за доклад, а можно слайды?

    • @tilir
      @tilir  Год назад +3

      Добавил в описание под видео. Слайды тут: sourceforge.net/projects/cpp-lects-rus/files/conference-talks/

  • @rouchy_
    @rouchy_ Год назад +1

    Можно пожалуйста вопрос про double deletion, немного не понимаю как он возникает, если два потока сперва инициализируют Old, и второй успевает сместить head и сделать delete, то первый же поток видит в CASе что head изменился и обновляет значение Old, и затем удаляет уже его?

    • @astmix1337
      @astmix1337 Год назад +1

      Два потока делают head.load(), затем кто-то из них точно сделает delete, а другой может свалиться на разыменовании невалидного указателя в cas

  • @EvgeniiKim-j5r
    @EvgeniiKim-j5r 9 месяцев назад

    Привет! У меня вопрос по поводу реализации метода push. В нем у нового узла переменная Next иницилизируется в конструкторе узла и потом не меняется. Т.е. если между созданием нового узла и попыткой его добавления (через compare_exchange_weak) кто-то окажется быстрее и обновит Head до нас, то дальше мы будем бесконечно вращаться в цикле while. Не нужно ли в случае неудачной попытки compare_exchange_weak делать New.Next = Head.load?

    • @tilir
      @tilir  9 месяцев назад

      Нет неправильно. Эту загрузку уже делает CAS.

    • @EvgeniiKim-j5r
      @EvgeniiKim-j5r 9 месяцев назад

      @@tilir Понял, спасибо!

  • @alexloktionoff6833
    @alexloktionoff6833 Год назад

    С аппаратной поддержкой на шине, самые обычные CAS Команды начинают отлавливать запись в атомик, вероятно изменение С++ не нужно

    • @tilir
      @tilir  Год назад

      Сейчас когда вы пишете CAS вы говорите только о сравнении значений, транзакционность никто не обещает. С новыми примитивами вы получите гарантии на уровне абстрактной машины.

    • @alexloktionoff6833
      @alexloktionoff6833 Год назад

      @@tilir что-то не поняли друг друга. Может ошибаюсь, в AXI ACE спецификации для slave устройств было расширение типа дополнительного массива регистров адресов транзакций. При начале транзакции мастера слейв запоминал адрес транзакции, и слейв мониторит все записи по адресам транзакций если id мастера отличаются от инициатора то запоминает у себя флаг сломанной транзакции, мастер при завершении операций запрашивает подтверждение транзакции у слейва и слейв выдает ему бит сломанной транзакции. Таким образом отлавливая даже запись того-же самого значения в адрес транзакции /атомик/. И все сигналы инициации и проверки транзакции совпадали с обычными сигналами мастера CAS инструкции. Если мой склероз не подводит, таким образом все новые ARM процессоры с контроллером памяти поддерживающее расширение получают защиту от ABA автоматически на аппаратном уровне, изменение С++ не требуется. Лицензия AXI ACE позволяет ее свободное использование для процессоров других архитектур, таким образом и RISCV может получить решение задарма. Разве не так?

    • @tilir
      @tilir  Год назад +1

      Вы когда пишете программу на C++ пишете её не для конкретной архитектуры а для абстрактной машины. Поэтому просто забудьте всё что вы выше написали.

  • @ivankrutov8789
    @ivankrutov8789 Год назад

    А о каких футболках идет речь?

    • @tilir
      @tilir  Год назад +3

      На конференции выдавали Асконовские футболки с каким то кодом на них ibb.co/RSXSyMx